【发布时间】:2015-04-20 07:42:17
【问题描述】:
我们有一个 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 好的。如何设置共享方案?
-
参见此处:自述文件部分中的github.com/facebook/xctool。
-
谢谢!会检查出来。
-
如果它确实改变了什么,请告诉我。
标签: ios xcode cordova xcodebuild