デバむスずシミュレヌタヌのコン゜ヌルからiOSアプリケヌションを起動したす

この蚘事では、コン゜ヌルコマンドを䜿甚しおアプリケヌションをアセンブルし、Xcodeを開かずに実際のデバむスずシミュレヌタヌで実行する方法に぀いお簡単に説明したす。



䞀般に、私の䌚瀟には、アプリケヌションのバンドルを扱う10人以䞊のios開発郚門があるずいう事実から始める䟡倀がありたす。 ルヌチン䜜業を自動化するために、CIサヌバヌを展開する必芁がありたした特別な歎史的理由により他のすべおの人ず同様に自己蚘述で、jenkinsに移行する予定です。 私は日垞的なこずを考えたす-プロゞェクトの組み立お、テストの実行もちろん、あなたが曞いおいない限り、テスタヌ甚ずアプリストアでのレむアりト甚のipashkaの䜜成。 䞀般的に、gitaでボタンたたはフックを抌すこずで、これらすべおが機胜するこずを望んでいたした。 開発者がボタンをクリックするだけですべおが機胜したすが、プログラムはこれたでのずころ蚈画内にありたす。 この蚘事では、プロゞェクトをコンパむルし、それをipaファむルにパックするずいうトピックに぀いおのみ觊れたす。 CIサヌバヌ偎のデバむスでプロゞェクトを起動する機胜はただ開発䞭ですが、パッケヌゞングプロセス自䜓は長い間「戊い」にあり、誰かに圹立぀可胜性がありたす。



私たちは䜕を蚈画しおいたすか





私たちが持っおいたす





実隓の頻床に぀いおは、サヌドパヌティのアプリケヌションを䜿甚しお、芪愛なる読者が蚘事で説明されおいるこずを繰り返すこずができるようにしたす。 オヌプン゜ヌスのresearchKit apple-ovフレヌムワヌクのテストアプリケヌションを䜿甚したす。



git clone https://github.com/ResearchKit/ResearchKit.git ~/Downloads/researchkit
      
      





 cd ~/Downloads/researchkit
      
      





プロゞェクトをコンパむルする前に、apple doc generator github.com/tomaz/appledocをむンストヌルする必芁がありたすむンストヌル方法の説明がありたす。

ダりンロヌドしたプロゞェクトに枡したす。 ルヌトプロゞェクトはResearchKitフレヌムワヌク自䜓であり、テストアプリケヌション自䜓は別の堎所にありたす。



 cd samples/ORKCatalog/
      
      





アプリケヌションをコンパむルしようずしおいたす。 シミュレヌタ甚のプロゞェクトのアセンブリには蚌明曞が必芁ないため、シミュレヌタ甚に収集したす/ファむルが提䟛されたす。



 xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog -arch x86_64 VALID_ARCHS=x86_64 -sdk iphonesimulator
      
      





゚ラヌが発生したす







ORKCatalogスキヌマがないため、ビルドがクラッシュしたす。 元のプロゞェクトのスキヌムは共有ずしおマヌクされおいなかったため、gitからの「ドレむン」の埌、xcodeはただこのスキヌムに぀いお䜕も知らないので、雪が降るので、プロゞェクトを開くだけです。 したがっお、プロゞェクトを開くだけです



 open ORKCatalog.xcodeproj
      
      





そしお、すぐに、スキヌムが衚瀺されたら、 xcodebuild -listを䜿甚しおスキヌムを確認できたす 。 再床収集を詊みたす。



 xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog -arch x86_64 VALID_ARCHS=x86_64 -sdk iphonesimulator
      
      





埅ちに埅った** BUILD SUCCEEDED **を確認した埌。 玠晎らしい、すべおが機胜したす。



シミュレヌタヌでプロゞェクトを実行する



シミュレヌタヌでコンパむルしたす。アヌキテクチャヌはi386 / x86_64です。 SYMROOTを䜿甚しお、ビルド結果のパスを蚭定したす。



  xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='x86_64 i386' VALID_ARCHS='x86_64 i386' -sdk iphonesimulator -configuration Debug SYMROOT=$(pwd)/build build
      
      





考えを声に出しおください蚘事を曞いたずき、リリヌスモヌドでのコンパむルは機胜しおいたしたが、蚘事を公開する前にすべおのステップを再床確認し、このモヌドでのコンパむルが機胜しなくなったため、デバッグで収集しおいるため、最埌のコミットのいく぀かがこれを砎りたした。



ビルドが成功した埌、 build / Debug-iphonesimulator /に ORKCatalog.appファむルを受け取りたした。 シミュレヌタでこれを実行するこずは残っおいたす。 これには、 ios-simナヌティリティgithub.com/phonegap/ios-simを䜿甚したす。 䜿い方はずおも簡単です。



利甚可胜なシミュレヌタヌのリストを取埗したす。



 ios-sim showdevicetypes
      
      









遞択したリストから、「iPhone-6-Plus」。 その䞊でアプリケヌションを実行したす。



 ios-sim --devicetypeid iPhone-6-Plus launch build/Debug-iphonesimulator/ORKCatalog.app
      
      





すべおが正しく行われた堎合、アプリケヌションを備えたシミュレヌタヌが開始するはずですctrl + Cを䜿甚しお、コン゜ヌルで入力モヌドに入りたす。







IPAファむルを䜜成し、実際のデバむスで起動する



ここではもう少し耇雑です。開発甚のmobileprovisionファむル開発者ずマシン䞊の蚌明曞p12ファむルが必芁であり、xcodeのアカりントは必芁ありたせん。 コン゜ヌルからアプリケヌションに眲名/パッケヌゞ化する堎合、xcodeでアカりントを远加する必芁はありたせん。これは、たずえば、p12ファむルのみを保存できるCIサヌバヌで非垞に圹立ちたす。



マシンには察応する蚌明曞があるず想定しおいたす。 アカりントのdeveloper.apple.comで開発者mobileprovisionを生成し、マシンにダりンロヌドしたらtest.mobileprovisionずいう名前を付け、バンドルIDはru.habrahabr.testになりたす。 xcodeが取埗できるディレクトリにコピヌした埌



 cp test.mobileprovision ~/Library/MobileDevice/Provisioning Profiles/
      
      





デバむスのアヌカむブを収集したすこれはarm64 / armv7のアヌキテクチャです。



 xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive
      
      





バンドルIDをアプリケヌションにただ登録しおおらず、mobileprovisionをリンクしおいないため、コンパむルは倱敗したす。゚ラヌは次のようになりたす。







コン゜ヌルからバンドルIDを枡し、Info.plistファむルに登録する必芁がありたす。 たた、コン゜ヌルを介しおリンクをmobileprovisionに転送したす。 パスORKCatalog / Supporting Files / Info.plistに沿っおPlistファむルを芋぀けたす。CFBundleIdentifierキヌの堎合、倀をru.habrahabr.testに蚭定したす。 バンドルIDは、ID PRODUCT_BUNDLE_IDENTIFIER = en.habrahabr.testの倀を持぀キヌを介しお枡されたす。 mobileprovisionに登録されおいるUUIDを䜿甚しお、PROVISIONIG_PROFILEキヌを介しおmobileprovisionぞのリンクを枡したす。



UUIDを取埗したす。



 security cms -D -i test.mobileprovision | grep -o "\w\{8\}-\w\{4\}-\w\{4\}-\w\{4\}-\w\{12\}"
      
      





倀は87b0df89-793a-4a0f-92bf-c5f9c35f1405に䌌おいたす。 再床収集したす。



 xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive PRODUCT_BUNDLE_IDENTIFIER=ru.habrahabr.test PROVISIONING_PROFILE=87b0df89-793a-4a0f-92bf-c5f9c35f1405
      
      





その結果、 build / archive.xcarchiveアヌカむブを取埗したすが、これはipaにパッケヌゞ化されたたたです。 Xcode 7は新しいパッケヌゞング方法を導入し、それを䜿甚したす。 これの前に、次の内容で構成ファむルoptions.plistを䜜成したす。



 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>method</key> <string>development</string> <key>uploadSymbols</key> <false/> </dict> </plist>
      
      





IPAを構築しようずしおいたす



 xcodebuild -exportArchive -exportOptionsPlist options.plist -archivePath build/archive.xcarchive -exportPath build/dev-ipa/
      
      





ログによるず、アセンブリがクラッシュし、䜕かに資栌があるこずを理解できたす。







誀っお、アプリケヌションが゚ンタむトルメントに眲名しおいるこずは明らかです。゚ンタむトルメントの倀は、モバむルプロビゞョニングの倀、぀たりcom.apple.developer.healthkitに察応しおいたせん。 理由を探しおいたす。 アプリケヌションが眲名されおいる資栌を確認したす。



 codesign -d --entitlements - build/archive.xcarchive/Products/Applications/ORKCatalog.app
      
      





取埗するもの



 <dict> <key>application-identifier</key> <string>XXXXX.ru.habrahabr.test</string> <key>beta-reports-active</key> <true/> <key>com.apple.developer.healthkit</key> <true/> <key>com.apple.developer.team-identifier</key> <string>XXXXX</string> <key>get-task-allow</key> <false/> </dict> </plist>
      
      





これを陀いお、すべおが正垞であるこずがわかりたす。



 <key>com.apple.developer.healthkit</key> <true/>
      
      





mobileprovisionにはこのオプションがありたせん。それがどこから来たのかを知る必芁がありたす。



 find ORKCatalog/ -name "*.entitlements" -type f
      
      





怜玢により、 ORKCatalog / Supporitng Files / ORKCatalog.entitlementsが埗られたした 。 私たちは内郚を芋たす



 cat ORKCatalog/Supporting Files/ORKCatalog.entitlements
      
      





倀は1぀だけです。



 <plist version="1.0"> <dict> <key>com.apple.developer.healthkit</key> <true/> </dict> </plist>
      
      





論理的には、この倀を远加する必芁があるmobileprovisionを再割り圓おする必芁がありたすが、私たちは怠zyであり、テストのためにこの倀のない資栌でアプリケヌションに再眲名する必芁がありたす。



少なくずも2぀のオプションがありたす。



1.既存の゚ンタむトルメントORKCatalog / Supporitng Files / ORKCatalog.entitlementsを線集しお、再構築したすアヌカむブ経由。

2.再構築せずに、私たち自身が必芁な資栌でORKCatalog.appに再眲名したす。



最初のオプションをよりシンプルに遞択したす。 したがっお、ファむルORKCatalog / Supporitng Files / ORKCatalog.entitlementsから次の行を削陀するだけです 。



  <key>com.apple.developer.healthkit</key> <true/>
      
      





アヌカむブを再床再構築したす。



 xcodebuild -project ORKCatalog.xcodeproj -scheme ORKCatalog ARCHS='arm64 armv7' VALID_ARCHS='arm64 armv7' -sdk iphoneos -configuration Debug archive -archivePath build/archive PRODUCT_BUNDLE_IDENTIFIER=ru.habrahabr.test PROVISIONING_PROFILE=87b0df89-793a-4a0f-92bf-c5f9c35f1405
      
      





ipaを䜜成した埌



 xcodebuild -exportArchive -exportOptionsPlist options.plist -archivePath build/archive.xcarchive -exportPath build/dev-ipa/
      
      





埅望のメッセヌゞ** EXPORT SUCCEEDED **が衚瀺されたす。 build / dev-ipa /の䞋に、デバむスにむンストヌルするipaファむルが衚瀺されたす。 ios-deploy github.com/phonegap/ios-deployを䜿甚しおデバむスにむンストヌルしたす。 デバむスを車にくっ぀け、デバむスIDを取埗したす



 ios-deploy -c
      
      





デバむスに展開したす。



 ios-deploy -i <device id> -b build/dev-ipa/ORKCatalog.ipa
      
      





垂堎のIPAファむルを収集したす



すべおは開発バヌゞョンず同じです。リリヌスmobileprovisionぞのリンクを倉曎するだけで、 options.plistで開発の代わりにアプリストア を配眮したす他のオプションに぀いおは、xcodebuild -helpヘルプを参照しおください。



たずめ



xcodeを䜿甚しなくおも、テスト甚およびアプリストアでのレむアりト甚にipaファむルを収集できたした。 これはすべお、CIサヌバヌで簡単に自動化できるため、開発者の䜜業が楜になりたす。



PS耇雑な構造のアプリケヌションをコンパむル/眲名するプロセスでは、耇数のタヌゲットがそれぞれ独自のモバむルプロビゞョニングファむル拡匵機胜、クロック、組み蟌みフレヌムワヌクを備えたアプリケヌションを必芁ずする堎合、䞊蚘のプロセスはファむルなしでは機胜しないこずに泚意しおください。



All Articles