从Xcode项目中导出.ipa文件而不需要打开Xcode

9
我们有一个API供用户调用,用于创建Cordova应用/项目,上传其www目录,然后开始编译并下载可执行的二进制文件。该二进制文件将会进入一个私人应用商店。
我在iOS的编译步骤中遇到了问题。Cordova构建步骤没有问题,但是它不像Android那样输出二进制文件。在阅读了Stackoverflow和其他地方找到的所有内容后,计划如下:
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyApp archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile"

假设签名身份和一切都设置正确,它几乎可以工作。第一个命令执行得很好。第二个命令却一直卡住。
但是,如果我在Xcode中打开项目,然后执行命令,它就会编译并导出,我最终得到了一个.ipa文件,这正是我想要的。似乎当项目首次打开时,Xcode会设置一个工作区和一些与方案相关的内容。
有没有办法让xcodebuild(或xcrun等任何东西)为我创建这个工作区文件呢?
还是有其他方法来解决这个问题?
目前,我有一个解决方案,即实际上打开Xcode项目,等待15秒,然后继续进行。但我可以想到无数种方法在某些时候会失败,所以我想将其更改为更优雅的方法。
我目前安装了Xcode 6.3,如果这有关系的话。
更新:Opal下面的答案让我找到了正确的方向(我想)。我最终做的是按照Opal的链接导出了一个共享方案,并将其用作未来应用程序的模板。解决方案大致如下:
# Copy shared scheme file into directory
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/.

# Use sed to replace app name in scheme file
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme

# CD into directory
cd /path/to/project/dir

# Move files from Cordova to our build directory
cp -r CordovaLib/build/* build/.

# Build and export
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyScheme archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile"

似乎您的项目中的方案没有共享,而且在打开项目后Xcode会创建它们。您需要共享方案。 - Opal
@Opal 好的。我该如何设置共享方案? - Morten Krane
请查看此处:https://github.com/facebook/xctool,在README部分。 - Opal
请告诉我它是否有任何变化。 - Opal
@Opal 这个看起来有效,谢谢!我最终做的是在我的系统中添加了一个通用的方案文件,我替换了一些字符串以确保应用程序名称正确等。 - Morten Krane
显示剩余3条评论
2个回答

2

看起来你尝试构建的应用程序没有共享方案。如果方案没有共享,则在项目加载到Xcode时创建。要创建共享方案,请参见网站。


0

以下是我在cordova环境中自动化生成ipa的步骤(xcode版本:6.0.1,cordova版本:3.6.0)

  • cordova/build.xcconfig中更改:CODE_SIGN_IDENTITY=iPhone Distribution(将“Developer”更改为“Distribution”)
  • 在cordova工作区中运行cordova build ios --device以生成.app文件
  • 使用以下命令进行签名:xcrun -sdk iphoneos PackageApplication -v ${WORKSPACE}/platforms/ios/build/device/${application.name}.app -o ${WORKSPACE}/platforms/ios/build/${application.name}.ipa --embed ${ios.distribution.provisionfile}.mobileprovision --sign ${code.signing.identity}

谢谢,但这对我没有用,我收到一个错误提示,首先是“警告:在 Mac OS X >= 10.10 中已弃用 --preserve-metadata 和选项 'resource-rules' 的使用!”,然后是“/var/folders/8l/l22zrl_n2v34qfxzwfpbdjxc0000gn/T/wh4epkuky9/Payload/TestMac.app/ResourceRules.plist:无法读取资源”。 - Morten Krane
哦,好的!我使用的是OS X 10.9.5。我会更新并尝试解决这个问题。感谢你的更新。 - kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接