iOS构build/ ipa创build不再可以从命令行工作

概观

我们的命令行构build(构build和创build.ipa)不再有效。

iTunesConnect已经开始拒绝使用CODE_SIGN_RESOURCE_RULES_PATH构build设置的构build。

如果我们没有这个设置,我们使用PackageApplication工具(我们用来创build签名的.ipa)失败。

看起来,即使CODE_SIGN_RESOURCE_RULES_PATH构build设置被排除,PackageApplication也会使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH

我怀疑PackageApplication需要更新,以便在排除CODE_SIGN_RESOURCE_RULES_PATH构build设置时CODE_SIGN_RESOURCE_RULES_PATH使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH

有没有人find这个解决scheme?

细节

我们在命令行上构build我们的应用程序,如下所示:

 xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' 

我们在命令行上创build签名的.ipa,如下所示:

 xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision 

iTunesConnect现在拒绝我们的版本,出现以下错误:

“这个包是无效的Info.plist包含myApp [myApp.app]包中的一个无效的键”CFBundleResourceSpecification“

如果我们从构build命令中删除了'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'位,那么应用程序就没有CFBundleResourceSpecification plist键(我认为是我们想要的)。 新的生成命令如下所示:

 xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 

现在的问题是,构build.ipa的命令失败,出现以下错误:

错误:/ usr / bin / codesign –force –preserve-metadata =标识符,授权,资源规则–sign iPhone分发:MyTeam(XXXXXXXXXX)–resource-rules = / var / folders / 2b / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T /zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist –entitlements / var / folders / 2b / 7hylk7nn13dgrl9yyh2wp0lm0000gn / T / zDRRJMkKtQ / entitlements_plistIUdGWLYe /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app失败,并显示错误1.输出:警告:使用–preserve-metadata选项“resource-rules”(在Mac OS X中不推荐使用= 10.10)!

警告: – 在Mac OS X> = 10.10中不推荐使用资源规则! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist:无法读取资源

看起来,即使CODE_SIGN_RESOURCE_RULES_PATH参数/构build设置被排除,PackageApplication也会使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH

我认为PackageApplication需要更新,以便在排除CODE_SIGN_RESOURCE_RULES_PATH参数/构build设置时, CODE_SIGN_RESOURCE_RULES_PATH使用资源规则参数调用/ usr / bin / CODE_SIGN_RESOURCE_RULES_PATH

苹果公司find了解决scheme。 从Xcode 7开始,我们应该使用xcodebuild而不是PackageApplication来生成.ipa文件。

xcodebuild有一个新的-exportArchive选项来创build一个更像Xcode Organizer的.ipa。

所以我们现在应该:

  1. xcodebuild archivebuild立一个xcodebuild archive
  2. xcodebuild -exportArchive创buildxcodebuild -exportArchive

我们现在build立这样的档案:

 xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive 

我们现在这样导出.ipa:

 xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build 

这两个命令创build文件build/myApp.xcarchivebuild/myApp.ipa

请注意, xcodebuild -exportArchive需要指向带有导出选项的.plist文件的-exportOptionsPlist参数。 要获得可以放入plist的完整列表,请运行xcodebuild -help 。 该文件的最小内容如下所示:

 <?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>app-store</string> <key>teamID</key> <string>YOUR_TEN_CHARACTER_TEAM_ID</string> </dict> </plist> 

在Xcode 9中,您现在必须在exportOptions.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>compileBitcode</key> <false/> <key>method</key> <string>ad-hoc</string> <key>provisioningProfiles</key> <dict> <key>my.bundle.idenifier</key> <string>My Provisioning Profile Name</string> </dict> <key>signingCertificate</key> <string>iPhone Distribution</string> <key>signingStyle</key> <string>manual</string> <key>stripSwiftSymbols</key> <true/> <key>teamID</key> <string>YOURTEAMID</string> <key>thinning</key> <string>&lt;none&gt;</string> </dict> </plist> 

制作iPA Usigterminal的步骤

清洁项目:

发布

 xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration ReleaseAdhoc -alltargets 

debugging

 xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets 

存档项目:

debugging

 xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -configuration Debug -archivePath pathForArchiveFolder/myApp.xcarchive 

发布

 xcodebuild archive -project ProjectPath/myApp.xcodeproj -scheme “myApp” -archivePath pathForArchiveFolder/myApp.xcarchive 

导出IPA

较早的版本:这可能会给已签名的资源添加,修改或删除。 错误

 xcodebuild -exportArchive -archivePath projectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportFormat ipa -exportProvisioningProfile “provisioning profile” 

新版本:

 xcodebuild -exportArchive -archivePath ProjectPath/myapp.xcarchive -exportPath projectPath/myApp.ipa -exportOptionsPlist ProjectFolder/exportPlist.plist 

这里有一个快速的提示,如果你需要创buildexportOptions.plist文件作为你的构build过程的一部分(也许jenkins)。

您可以使用plutil工具将JSON转换为plist。 例:

 echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- - 

请享用!

转到项目文件夹:

存档:

对于DEBUG:

 xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive 

发行版:

 xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive 

取iPA:

 xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/ 

我已经创build了一个项目名称myFirstApp,项目的位置是Desktop / myFirstApp。 在Xcode 8.3上testing

步骤1 –

 cd /Users/Ved/Desktop/myFirstApp/ 

第2步 –

 xcodebuild -scheme myFirstApp archive \ -archivePath /Users/Ved/Desktop/myFirstApp.xcarchive 

步骤3 –

 xcodebuild -exportArchive -exportFormat ipa \ -archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \ -exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \ -exportProvisioningProfile "myFirstAppDevProfile"