Ios 在不打开Xcode的情况下从Xcode项目导出.ipa文件

Ios 在不打开Xcode的情况下从Xcode项目导出.ipa文件,ios,xcode,cordova,xcodebuild,Ios,Xcode,Cordova,Xcodebuild,我们有一个API,用户可以调用它来创建Cordova应用程序/项目,上传他们的www目录,然后开始编译和下载可执行的二进制文件。然后,该二进制文件将进入一个私有应用程序商店 我在iOS的编译步骤上遇到了问题。Cordova构建步骤没有问题,但它不会像Android那样输出二进制文件。在阅读了Stackoverflow和其他网站上的所有内容后,我的计划是: xcodebuild clean -configuration Release -alltargets xcodebuild -scheme

我们有一个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的链接导出一个共享方案,并将其用作未来应用程序的模板。解决方案是这样的:

# 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"

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

  • 更改cordova/build.xcconfig:CODE\u SIGN\u 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}

您尝试构建的应用程序似乎没有共享方案。若方案未共享,则在项目加载到xcode时创建方案。要创建共享方案,请参阅站点。

项目中的方案似乎没有共享,xcode在打开项目后创建它们。您需要共享方案。@Opal确定。如何设置共享方案?请参见此处:自述部分。谢谢!将对此进行检查。如果它确实改变了什么,请告诉我。谢谢,但这对我不起作用,我收到一个错误,首先说“警告:使用--preserve metadata with option“resource rules”(在Mac OS X>=10.10中已弃用)!,然后“/var/folders/8l/l22zrl_n2v34qfxzwfpdjxc0000gn/T/wh4epkuky9/Payload/TestMac.app/ResourceRules.plist:无法读取资源”。哦,好的!我正在使用OS X 10.9.5。我将更新并尝试修复此问题。感谢您的更新。