酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

開発-iOS

iPadアプリでなぜか画面が回転してしまう不具合

iPadアプリを縦画面固定にしたいけれど、なぜかクルクル回転してしまう。Device Orientationを確認してもPortrait(縦)しかチェックされていない。 Info.plistを開くと下記のようになっていた。XcodeでみるInterface Orientation設定はiPhoneでしか有効になら…

いまどきのiOSアプリのログイン画面の実装について考える

いまどきのiOSアプリでのログイン画面ってどんなかんじなんだろう?と考えてみた。本記事ではデザイン的な話ではなくて、内部の実装的な部分について言及しています。 結論としては、あまり小難しいことをしなくても、 ユーザーIDを入力するUITextField の t…

iOSアプリのapp-ads.txt対策

2019年8月8日にAdMobから一通のメールが届いた。 AdMob は app-ads.txt のサポートを開始します app-ads.txt 導入の準備はお済みですか? え、なにそれ。app-ads.txtってなに? 突然 app-ads.txt 導入の即時対応を求められる まさかの即日対応を求められる。…

UISearchBarのTextFieldの背景色を変更する(iOS 13以降ではAPIが変わるらしい)

UISearchBarのTextField部分の背景色を変更できなくて頭をひねった…… UISearchBarのTextFieldの背景色を変更する 下記のコードで対応することができた。 extension UISearchBar { var textField: UITextField? { return value(forKey: "searchField") as? UI…

GoogleドキュメントのスプレッドシートからiOSとAndroidの文字列リソースを作ってみた! (2019年7月版)

Googleドキュメントのスプレッドシートから、iOSアプリ向けの Localizable.strings と Androidアプリ向けの strings.xml を作成するツール「csv2strings」を作成しました。 csvファイルからiOSとAndroidの文字列リソースを作成するという二番煎じのツールで…

Swiftで特定の文字列が格納されているインデックスを取得する

文字列を格納した配列があり、Swiftを使って特定の文字列が格納されているインデックスが知りたいことがあります。 let list = [ "松平", "上杉", "木下", "津田", "島津", "木下", "尼子" ] let foundItems = list.enumerated() .filter({ $0.element == "…

Swiftでマスク画像を使って切り抜き画像を作る

Swiftでマスク画像を使って、UIImageの画像を切り抜きたい(マスキングしたい)と思います。 マスク画像を使って切り抜く マスク画像を使って切り抜くのは昔からありますが、UIImageView#tintColorが使えるようになったこともあり、最近実装することがありませ…

MKMapViewでAnnotationViewをタップしても反応しない

MapKitのMKMapViewを使って地図を表示するアプリを開発しています。 MKAnnotationViewを継承した CustomAnnotationView をタップしても MKMapViewDelegate#mapView(_:, didSelect:) が呼ばれず困っていました。 タップしてもdidSelectが呼ばれない ハマった…

UICollectionViewのカスタムセル上のViewが綺麗な正円形にならない

(2019/09/14追記)大昔に「UICollectionViewの初期表示時にズレる - 酢ろぐ!」でも同じ現象でハマっていたらしい。 UICollectionViewのカスタムセル上のViewが綺麗な正円形にならない UICollectionViewでAuto Layoutを使ったカスタムセル上で円形のViewを表…

SwiftでWKWebViewを使って全面WebView画面を作る

SwiftでWKWebViewを使って全面WebView画面を作りました。 WKWebViewを使って全面WebView画面を作る import UIKit import WebKit class WebViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = UI…

Swiftでカードをシャッフルする

60枚のカードを偏りなくランダムに並び替える方法として、「Fisher-Yates shufflアルゴリズムを用いて自作で配列をシャッフルさせる - Qiita」で紹介されているFisher-Yatesシャッフルアルゴリズムが有名です。調べたらWikipediaでより詳細に「フィッシャー–…

ipaファイルに組み込まれているembedded.mobileprovisionの中身を調べる

大昔に「Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成してiTunes Connect(Testflight)に投げる方法 - 酢ろぐ!」で書いたように、Jenkinsからxcodebuildを叩いてipaを作成しています。つい最近AdHocビルドで生成したipaファイルに含ま…

さくさん、インコネコのLINEスタンプを作ったってよ

僕がTwitterのアイコンに使っているのは、嫁が生み出したインコとネコのハイブリットミュータント「インコネコ」です。このアイコンに変えてから、かれこれ数年経っている気がしますが名前があったことにビックリしました。一昨日名前を聞きました。 このイ…

iOSアプリのBundle IDの調べ方/TestFlightアプリのBundle IDを調べた

「TestFlightアプリのBundle IDがわからないか?」と聞かれたので調べる方法を調べました。 本記事執筆時点で確認できた方法で、将来的に同様に調べることができるかについてはわかりません。 Bundle IDの調べ方 Google等で検索してアプリのidを調べる TestF…

iOS 12にアップデートしたところホームに表示されるアプリ名が正しく表示されなくなってしまった

Apple Watch Series 4が今日届いたので、ペアリングさせるためにiPhoneの方もiOS 12にアップデートすることにしました(諸事情によりXcodeは今もアップデートできていません)。 デバイスをiOS 12にアップデートして、ホームに表示されるアプリ名が正しく表示…

iOSのLocationManager#requestLocation()で測位にどれくらいの時間がかかっているのか調べた

iOSで現在の位置情報を1回だけ取得したい場合には LocationManager#requestLocation()を利用します。OS側で測位が完了すると、LocationManager#locationManager(manager:didUpdateLocations:) で位置情報を受け取ることができます。 どれくらいの精度だとど…

iOSで開始日と終了日から間にある年月日を求める

開始日と終了日だけを渡された状況で、開始日と終了日から間にある年月日を求める方法を紹介します。 翌日の求め方 指定された日付から翌日(次の日)を求めるにはCalendar#date(byAdding:value:to:)を使います。 let today = Date() let tomorrow = Calendar.…

In-Houseバイナリに変更した途端プッシュ通知が送れなくなったので問題を切り分けた

諸事情があって、Apple Developer ProgramなアカウントAで作成していたAd-Hocアプリを、Apple Developer Enterprise ProgramなアカウントBで作り直すことになりました*1。 作り直すといっても署名関係だけの問題で、すんなりとProvisioning Profileを変えて …

UIImageViewやUIButtonのbackgroundImageに特定の画像を設定するとなぜか間延びして表示されていた

特定の画像をUIImageViewやUIButtonで表示させると一部分を伸ばして表示したような……9patchみたいな表示がされていた。Images.xcassetsから特定の画像を削除して、再度追加したところ問題は発生しなくなった。 gitで差分を確認するとImages.xcassets/button_…

iOSでジオフェンス機能を実装する

「目的地に近づいたよー」的なことができるのがジオフェンス機能です。アプリを閉じていても反応するのでとても便利と聞いたので実装してみました。 LocationManagerで位置情報を取得する ジオフェンス機能を実装する コード アプリが起動していなくても処理…

(未解決)UINavigationBarで大きなタイトルを使っている時にスクロールさせると稀に画面タッチができなくなる問題

iOS 11から大きなタイトルが使えるようになりました。 UINavigationBarの大きなタイトルを使っている時に、UITableViewをスクロールさせると稀に画面タッチができなくなる問題が発生しています。発生確率はかなり低くて何が原因で発生するのかがわかっていま…

UIViewControllerを使っている場合にUINavigationBarの大きいタイトルが小さくならない/追従しない

久しぶりにiOSネタを投稿するような気がします。iOS 11からUINavigationBarに大きいタイトルが追加されました。 テーブルビューをスクロールさせた時に自動的に小さいタイトルに切り替わって欲しいので、largeTitleDisplayModeに.automaticを設定しています…

UITabBarでタブの文字を消して画像だけを表示したい

久しぶりに汎用的なネタが書けそうです。本記事ではUITabBarのUITabBarItemの文字を消して画像だけを表示する方法を紹介します。 UITabBarで文字を消して画像だけを表示したい デザインガイドラインでは、通常タブバーはアイコンと項目名とをセットにして扱…

iOSでCIFilterを使ってバーコードを生成する

iOS/AndroidアプリでCode128のバーコードを生成する必要がでてきました。iOS 8.0くらいから標準APIだけで二次元コードの読み取りと生成ができるようになっていたようです。 昔からバーコード生成といえばZXingみたいなところがありましたよね。遡って調べて…

iOS向けAd-Hocビルドバイナリを「インストールできない」と言われた時の対処方法

僕の頭の中でいつも悩むことを明文化してみました。まだ体系化できていないし検証が必要なものも多いです。不足があったり対処方法が間違っているかもしれませんので、その時は教えてくださると嬉しいです。 そもそもUDIDが間違っているかもしれないケース U…

Ad-Hocビルド時に連続したFで始まっているUDIDを貰ったときに気をつけたいこと

久しぶりにXcodeビルドマンとして活動していました。 少し前までは、In-Houseなバイナリばかりビルドしていたので特に意識していなかったのですが、最近Ad-Hocなバイナリをビルドする機会が増えてきました。色んな方のUDIDを頂いてApple Developer Centerに…

Xcode 9 GM SeedでJenkinsのビルドに失敗する

Xcode 9 GM SeedでIn-HouseなアプリをJenkinsでビルドさせるときにエラーが発生しました。 Xcode 9 GM SeedでJenkinsのビルドに失敗するようになってしまった Jenkinsのコンソールログを見ると、Archiveには成功しているけれどExportに失敗しているログでし…

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける

iPhone X シミュレータで上下の黒帯が入ってアプリ領域が欠ける現象が発生しました。 iPhoneでは互換性を保つための仕組みがあって、例えばiPhone 5が登場した時にアプリを起動すると上下の黒帯が入る現象がありました。4.7インチRetinaディスプレイに対応さ…

Xcode 9 GMでCarthageを使ってインストールしたRealmがビルドエラーになる

Xcode 9 GMをインストールしました。 ikatomo2をビルドしようと試みました。Realmを使っているのですがRealmの部分で下記のようなエラーが発生しました。 /MY_APP/db/Database.swift:10:8: Module compiled with Swift 3.1 cannot be imported in Swift 3.2:…

Xcode 9 GM Seedでcarthage updateを実行したらエラーが発生した

Xcode 9 GMをインストールして、carthage updateを実行したらエラーが発生した。 $ carthage update Carthage requires git 2.3.0 or later. 先に結論を書くと、原因はXcode.appのパッケージの名前を変更していたからでした。 Xcode 9 GMをXcode.appとしてま…