これを知っていると困った時に役に立つTips XcodeによるiOSアプリ開発編
今回のTALKでは、今年に入ってから書き溜めた、”Xcode”でiOSアプリを開発する際にネットから集めた個人的な備忘録をご紹介します。いずれも、ちょっとした内容ですが、知っていると何かと役立つTipsです。
< 開発を進める度に減っていくディスクの空き容量対策 >
iOSアプリの開発をすればするほどディスクの空き容量が減ってしまいます。その原因は、”ライブラリ” – “Developer” フォルダに、アプリ開発時に必要な歴代のデバイスデータや開発時に”Xcode”が作った中間ファイル、アップルに申請する際に作成するアーカイブファイル、そしてシミュレータの使用時に作成されるアプリデータなどが、このフォルダに大量に作成されるからです。しかも、これらのファイルは市販のディスクお掃除アプリの対象外だったりします。
全てを理解しているわけではありませんが、個人的に整理した内容を備忘録的に掲載しておきます。
・ “Developer” – “CoreSimulator” – “Devices”
このフォルダには、シミュレータで使用する歴代のiOSデバイスに関連するデータが保存されています。例えば、”iOS 13.4がインストールされているiPhone 11 Pro”といった感じです。でも、どのiOSデバイスも16進のフォルダ名なので、どれが不要なのか分かりません。
“ターミナル”で、
xcrun simctl list devices
と打つと、どのフォルダがどのデバイス用なのかリストアップしてくれます。そのなかで、”(Shutdown)”と記載されているものが古いデバイスです。
ここに削除しても良いのですが、以下のコマンドを打つと、不要なデバイスを一括して削除してくれます。これは便利!
xcrun simctl delete unavailable
・”Developer” – “Xcode” – “Archives”
このフォルダには、アップルに開発したiOSアプリを申請する際に”Xcode”で作成するアーカイブが保存されています。アーカイブした日付がフォルダ名になっているので、過去のアーカイブを削除します。POOHの場合は、念のため、別のディスクにバックアップした後に削除しました。
・”Developer” – “Xcode” – “DerivedData”
このフォルダには、iOSアプリをビルドする都度、”Xcode”が作成するプロジェクト毎のキャッシュデータが保存されています。
“Xcode”の”Product”メニューの”Clean Build Folder”で個々のアプリ用の一時データがクリーンにできるようですが、数が多い時は、それぞれのフォルダ内にある”info.plist”の作成日をチェックして古いものを機械的に削除しています。POOHの場合は、念のため、別のディスクにバックアップした後に削除しました。
・”Developer” – “Xcode” – “iOS DeviceSupport”
このフォルダには、実機でiOSアプリをテストする際に利用する歴代のiOSイメージが保存されているようです。POOHの場合は、最新のiOSでしか実機テストをしていないので、古いバージョンのフォルダは、念のため、別のディスクにバックアップした後に削除しました。
上記のお掃除を時間がある時にやっておくと、ディスクをかなり軽量化できるはずです。
< シミュレータで特定の位置情報でロケーションを指定する >
位置情報を利用したiOSアプリの開発では、アプリをインストールした実機を持ち出して、いろいろな場所で動作確認すると思います。
開発済みのiOSアプリをアップルに申請する時、申請画面では”iPhone 11 Pro Max”相当の画面キャプチャが必須なので、POOHの場合はシミュレータで画面キャプチャを撮っています。でも、位置情報を利用したiOSアプリの場合、自宅やオフィスの場所を特定できちゃうような画面をキャプチャしたくないですよね。
“Xcode”の”Edit Scheme …”の”Run Debug”画面にある”Core Location”欄で、”Allow Location Simulation”を有効にし、”Default Location”の”Add GPX File …”で別途作成した”GPXファイル“を指定しておくと、”GPXファイル”に記述したロケーション情報通りの場所をシミュレータ画面に表示することができます。
とは言え、”GPXファイル”を作成する良い方法が分からないですよね。一般的にGPXデータは、登山やトレッキング等を楽しむ人たちが活用しているので、その分野にフォーカスしたアプリを探すと良さそうです。基本、有料アプリが多いなかで、macOSで使える”TrailNote“は、無料かつ使いやすいアプリなので試してみる価値があるとおもます。
勿論、ワンポイントの位置情報なら、GPXの記述は難しくないのでマニュアルで書いて、”.gpx”という拡張子付きでファイルに保存すればOKです。
< シミュレータに実機に保存しているユーザデータを反映する >
アップルにiOSアプリを申請する際、”iPhone 11 Pro Max”相当の画面キャプチャが必須ですが、実機に蓄えたユーザデータをシミュレータで簡単に利用できないのはとても辛いですよね。画面キャプチャのためにデータをいちから入力し直したりするのはメンタル的にも面倒ですし、実機でしか収集できないMotionセンサーの計測データ等を反映した画面キャプチャはそもそも不可能です。(iCloud経由でデータを共有できるヘルスケア関連のデータは問題ないんですけどね。)
そこで、実機に保存してあるユーザデータをシミュレータに反映する方法を探ってみました。
結論から言うと、以下のパス上にある”Documents”フォルダにユーザデータを保存すればシミュレータの画面にデータが反映できます。
~/Library/Developer/CoreSimulator/Devices/IDENTIFIER for Simulator/data/Containers/Data/Application/IDENTIFIER for Application/Documents
・実機に保存してあるユーザデータをダウンロードする
“Xcode”の”Window”メニューにある”Devices and Simulators”を実行すると、下図のような画面 (“Devices”タブ画面)が表示されます。
“INSTALLED APPS”欄でiOSアプリを選択後、歯車アイコンの”Download Container…”を実行すれば、選択したiOSアプリに保存されているユーザデータをダウンロードできます。
ダウンロードしたファイル (拡張子が.xcappdata)内の”AppData” – “Documents”フォルダに、CoreDataで保存したデータやアプリの設定ファイルが保存されています。
ダウンロードしたファイルは、将来、別のiPhoneにアプリをインストールする時にも利用できるので保管しておきましょう。
・”IDENTIFIER Simulator”の値を調べる
先程紹介したパス上にある”IDENTIFIER Simulator“の値は、上記の”Devices and Simulators”画面の”Simulators”タブ画面を開き、使用するシミュレータをリストで選択することで表示される画面の”Identifiers”欄に掲載されています。
・”IDENTIFIER for Application”の値を調べる
先程紹介したパス上にある”IDENTIFIER for Application”の調べ方が一番の難所です。
“Xcode”上で、シミュレータを使用したデバックを行う前に、開発中のiOSアプリのどこかに”Break Point”を設定し、アプリの実行を一時停止するようにします。”Break Point”の設定箇所は、アプリ起動時に必ず実行される箇所にして下さい。
デバックを開始後、”Break Point”でiOSアプリが一時停止したら、
コンソール画面上の(lldb)の直後に、
po NSHomeDirectory()
というコマンドを打ちます。すると、シミュレータが使用しているiOSアプリのホームディレクトリのパスが表示されます。このパスは、冒頭で紹介したパスそのものです。最初の赤いアンダーライン部分は先程調べた”IDENTIFIER Simulator“の値、次の赤いアンダーライン部分が”IDENTIFIER for Application”です。
このパス通りにフォルダを開きます。
“Documents”フォルダに、ダウンロードしたファイル (拡張子が.xcappdata)内の”AppData” – “Documents”フォルダに保存されているファイルをコピーすれば作業が完了です。
シミュレータでiOSアプリを起動し直すと、下図のように。実機で作成したユーザデータが画面に反映されます。
< アップルにiOSアプリを申請する時に必要なPrivacy Policyの作成方法 >
久しぶりに、自作のiOSアプリをアップルに申請しようとしたら、Privacy Policyを掲載しているWebページを指定することがマストになっていました。
以前から、センシティブなデータを扱うiOSアプリに関しては、個々にPrivacy Policyを掲載することを求められていましたが、こういうことを個人の開発者に求めるって、正直言ってなかなか辛いものがあります。
でも、世の中には、こういった状況に手を差し伸べてくれる人たちがいて、”App Privacy Policy Generator“というWebページで、いくつかの項目を入力するだけで、簡単にPrivacy Policyを作成できます。作成したPrivacy Policyのホスティングまでサポートしてくれるようですが、HTMLやMarkdownでダウンロードすることも可能です。
これは有り難い!
ただ、”Safari”だと、HTMLやMarkdownでダウンロードするボタンが動作しないようなので、別のWebブラウザを利用した方が良いかもしれません。
POOHがこのサービスを利用して作成ページが、
“Privacy Policy 無料iOSアプリ” (“https://www.min2club.com/privacypolicy_free/”)です。(この内容でアップルの審査にはパスしています。)
< Xcodeのシミュレータで簡単に設定を変更するツールがあるよ >
“Xcode”上で、シミュレータを使用したデバックをしている時、一度設定した内容がちゃんと反映されないことが多くて、何度も設定し直すのにはイライラします。
とりわけ、”WatchOS“のアプリ開発をシミュレータで行う際、位置情報がすぐにリセットされちゃうのはウンザリ。(“Xcode”のこれバグなの?)
そんな場面で、役に立ってくれるのが”COTROL ROOM“というツールです。このツール、現状では自分でアーカイブする必要がありますが、シミュレータ回りの設定を画面で操作できるので、設定の都度、いちいちシミュレータのメニューを開く必要がなく、とても重宝しています。
後、このツールがなかったらどうにも対処できなかったのが、”WatchOS”アプリをシミュレータで動かす時の言語設定です。なぜか、Schemeなどをいじってみても日本語表示にならず困っていたのですが、このツールで”Language”の設定を変更したら、ちゃんと日本語表示になりました。
< 肥大化傾向にあるアプリアイコンの登録もあっという間に完了 >
昨今のアプリ開発で面倒な作業のひとつに、アプリ用のアイコン作りがあります。”Xcode”のプロジェクトにある”Images.xcassets”に登録する必要のあるアイコンの数は、年々肥大化の傾向にあるので、アイコン作りだけでも相当面倒な作業になっています。1つ大きなアイコンを登録すれば、アップル側のシステムでよろしくやってくれるようにはならないのかなあ?下図は、iPhone, iPad そしてMac Catalystをサポートするアプリに求められるアイコンの数です。
この作業をあっという間に終わらせてくれるアプリが”Asset Resizer“です。有料アプリだけど、アイコン作りを時短できるなら安い投資だと思います。
それぞれのプラットフォーム別に自動作成するアイコンのサイズを予め登録し、1024 x 1024 pixelのオリジナル版のアイコンをドラッグ & ドロップ、そして”Run”ボタンをクリックすれば、
あっという間に、各種サイズのアイコンの出来上がり!
ただ、Apple Watch版のアプリを開発する場合は、このツールに限らず、アイコンにアルファチャンネルが付いているとアップルの審査にアップロードしたタイミングでエラーになってしまいます。
そんな時は、”プレビュー”アプリでアイコンイメージを開き、”書き出す…”メニューの実行で”アルファ”項目を無効にすればOKです。
< Xcodeのシミュレータ画面を録画する >
完成したiOSアプリをアップルに申請する際、どうしてもアップルのレビュア側ではアプリの動作を検証できない機能ってありますよね。
そんな時は、実機や”Xcode”のシミュレータの画面を録画した内容をユーチューブにアップし、その内容をレビュアに見てもらう方法があります。
実機で画面を録画する方法は、アップルのサポートページ”iPhone、iPad、iPod touch で画面を録画する方法“を参照いただくとして、シミュレータ画面の録画方法を紹介しておきます。
シミュレータを起動した状態で、macOSの”ターミナル”から以下のコマンドを発行します。
xcrun simctl io booted recordVideo sample.mov
そして、Ctrl+cで録画終了です。
こんな感じで録画したムービーファイルが作成されます。
ちなみに、何種類か連続して録画する場合は、同じファイル名のままでは録画できませんのでご注意下さい。
< アーカイブ時に例の不吉なエラーメッセージが表示されてしまった時の対処 >
ようやくiOSアプリの開発を終え、いざアップルに申請しようとアーカイブしたアプリをアップロードしようとしたら、
Profile doesn’t match the entitlements file’s values for the application-identifier and keychain-access-groups entitlements.
という証明書がらみのエラーが発生して、アップロードできないことってありますよね。
POOHの場合は、普段開発に使っているiMac Pro以外のマシンでビルドした時、”Revoke”云々というメッセージが表示された際、不覚にもそのボタンを押してしまった以降、証明書に関するエラーが表示されるようになり、遂にアップロードできなくなってしまいました。
証明書関連のエラーって、一度発生するとどうにもこうにも解消できず、毎回途方に暮れることが多いです。
今回は、ネットで調べつつ、いろいろなパターンで解決しようと試みたのですがうまくいかず、最後の手段ということで、思い切って、
~/Library/MobileDevice/Provisioning Profiles
にある全てのファイルを削除してみました。勿論、バックアップを取ったうえですけどね。そしたら、うまくアップロードできるようになりました。
全削除したフォルダには、新しいファイルが作成されていたので、このフォルダで該当ファイルが見つからなかった時はキーチェーンから最新の証明書データを反映し直してくれるんだと思います。(想像の範囲ですが。)
ちなみに、全削除後にアーカイブするタイミングで、以下のメールがアップルから届きます。内容的には、そう言われてもなあといった感じですけどね。
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。