iOS构建/ ipa创建不再适用于命令行

Mik*_*ler 33 xcode xcodebuild ios

概观

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

iTunesConnect已开始拒绝使用CODE_SIGN_RESOURCE_RULES_PATH构建设置的构建.

如果我们构建没有该设置,则PackageApplication工具(我们用于创建签名的.ipa)失败.

似乎PackageApplication使用resource-rules参数调用/ usr/bin/codesign,即使CODE_SIGN_RESOURCE_RULES_PATH排除了构建设置也是如此

我怀疑PackageApplication需要更新,以便在CODE_SIGN_RESOURCE_RULES_PATH排除构建设置时不会使用resource-rules参数调用/ usr/bin/codesign .

有人找到了解决方案吗?

细节

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

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'
Run Code Online (Sandbox Code Playgroud)

我们在命令行上创建签名的.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
Run Code Online (Sandbox Code Playgroud)

iTunesConnect现在拒绝我们的构建,并出现以下错误:

"此捆绑包无效.Info.plist包含myApp [myApp.app]包中的无效密钥'CFBundleResourceSpecification'"

如果我们'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'从构建命令中删除该位,那么应用程序是在没有CFBundleResourceSpecificationplist键的情况下构建的(我认为这是我们想要的).新的构建命令如下所示:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 
Run Code Online (Sandbox Code Playgroud)

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

错误:/ usr/bin/codesign --force --preserve-metadata = identifier,entitlements,resource-rules --sign iPhone Distribution: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.输出:警告:使用带有"resource-rules"选项的--preserve-metadata(在Mac OS X中不推荐使用> = 10.10)!

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

即使CODE_SIGN_RESOURCE_RULES_PATH排除了参数/构建设置,PackageApplication似乎也会使用resource-rules参数调用/ usr/bin/codesign .

我认为PackageApplication需要更新,以便CODE_SIGN_RESOURCE_RULES_PATH在排除参数/构建设置时不会使用resource-rules参数调用/ usr/bin/codesign .

Mik*_*ler 104

Apple通过解决方案回复了我.从Xcode 7开始,我们应该使用xcodebuild而不是PackageApplication生成.ipa文件.

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

所以我们现在应该:

  1. 用它构建存档 xcodebuild archive
  2. 用.创建.ipa xcodebuild -exportArchive

我们现在构建这样的存档:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive
Run Code Online (Sandbox Code Playgroud)

我们现在导出.ipa像这样:

xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build
Run Code Online (Sandbox Code Playgroud)

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

请注意,xcodebuild -exportArchive需要一个-exportOptionsPlist指向带有导出选项的.plist文件的参数.有关您可以放入该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>
Run Code Online (Sandbox Code Playgroud)

在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> 
Run Code Online (Sandbox Code Playgroud)

  • 我可以送你一杯啤酒吗? (4认同)

Dev*_*esh 14

制作iPA Usig终端的步骤

清洁项目:

发布

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration  ReleaseAdhoc  -alltargets
Run Code Online (Sandbox Code Playgroud)

调试

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets
Run Code Online (Sandbox Code Playgroud)

档案项目:

调试

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp” -configuration Debug  -archivePath  pathForArchiveFolder/myApp.xcarchive
Run Code Online (Sandbox Code Playgroud)

发布

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp”  -archivePath  pathForArchiveFolder/myApp.xcarchive
Run Code Online (Sandbox Code Playgroud)

出口IPA

旧版本:这可能会添加,修改或删除已签名的资源.错误

xcodebuild -exportArchive -archivePath  projectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportFormat ipa  -exportProvisioningProfile  “provisioning profile”
Run Code Online (Sandbox Code Playgroud)

新版本:

xcodebuild -exportArchive -archivePath  ProjectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportOptionsPlist  ProjectFolder/exportPlist.plist
Run Code Online (Sandbox Code Playgroud)