从Xcode项目导出.ipa文件,而无需打开Xcode

时间:2015-04-20 07:42:17

标签: ios xcode cordova xcodebuild

我们有一个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"

2 个答案:

答案 0 :(得分:2)

您尝试构建的应用程序似乎没有共享方案。如果不共享,则在将项目加载到xcode时创建方案。要创建共享方案,请参阅this site。

答案 1 :(得分:0)

这些是我用来自动生成ipa而不在我的cordova环境中打开xcode的步骤。 (xcode版本:6.0.1 cordova版本:3.6.0)

  • 更改 cordova / build.xcconfig CODE_SIGN_IDENTITY = iPhone发布(更改"开发人员"至"发布"。)
  • 在生成.app文件的cordova工作区中运行cordova build ios --device
  • 使用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}
  • 签名