Cordova和ios-deploy导致构建失败,并出现“codesign exit code 1”/“permission denied”

时间:2015-05-08 19:32:38

标签: ios xcode cordova codesign

我正在研究基于Cordova的移动应用程序,并希望利用Cordova CLI直接从命令行部署和运行我的移动应用程序,而无需进入XCode进行构建

做的时候:

cordova run ios --device

Cordova慷慨地告诉您应该安装ios-deploy节点模块。我按照他们的GIT网站上的步骤这样做了。

当我下次尝试运行时,我开始遇到代码签名错误,特别是:

/Users/blahblah/platforms/ios/build/device/myApp.app: Permission denied
Command /usr/bin/codesign failed with exit code 1

我无法让终端上的代码签名工作,更糟糕的是,回到XCode会导致同样的错误!

幸运的是,错误消息说明了一切:权限被拒绝;我能够通过弹回终端并在我的整个应用程序文件夹上运行chmod来纠正这个问题,即:

chmod -R a+rwx myApp

然后我可以回到XCode并再次进行项目构建和部署(哇!),但是如果我尝试通过Cordova CLI进行部署,则会出现同样的问题。

似乎ios-deploy和/或cordova正在搞乱文件夹权限,但我不知道如何解决这个问题。

任何建议都将不胜感激!

更新 要清楚,我能够在XCode中成功签署应用程序,如果我先进入终端,然后进入platforms / ios文件夹并在“www”文件夹上执行chmod -R a + rwx。

我遇到的问题是尝试从命令行成功构建/签名。

我做了一些进一步的诊断,似乎问题出在Cordova CLI本身,而不是ios-deploy;当我执行时:

cordova prepapre

它将我的“www”文件夹复制到“platforms / ios / www”,但是当从具有写访问权限的所有人(即:drwxrwxrwx)向仅具有写访问权限的用户执行此操作时,它会更改权限,即:(drwxr -xr-x)的

这似乎是对codeign应用程序的污染,并导致我的权限被拒绝错误。

我只是希望有人知道如何解决这个问题,或者我的构建可能做错了什么 - 我不想进入XCode进行这些构建。

3 个答案:

答案 0 :(得分:0)

检查构建设置中的CODE_SIGN_IDENTITY属性。您的配置文件是否已在此处选择?

您还需要在应用.plist中输入有效的捆绑包标识符。

标识符必须与您在生成配置文件时提供的标识符相匹配。

答案 1 :(得分:0)

事实证明,Cordova CLI工作正常,ios-deploy npm包也是如此。

问题最终出现在解决方案本身内,与工具无关。

我在这个特定的Cordova应用程序中使用Ionic框架,他们的框架安装了一些“after_prepare”挂钩(在hooks文件夹中),它试图在构建之前帮助准备/清理一些无关的文件。

其中一个钩子(名为“020_remove_sass_from_platform.js”)试图通过在构建之前清理不需要的SASS文件来帮助,以减少已编译应用程序的大小。

不幸的是,这个钩子正在调整文件夹权限(我猜是为了确保删除成功),这是“www”文件夹在“cordova准备”期间权限更改的原因。

我删除了钩子,现在Cordova CLI按预期构建并签署了APK,并且ios-deploy软件包将其推送到设备,所有这些都不使用XCode。

希望这对其他人有所帮助。

答案 2 :(得分:0)

试试这个

sudo npm install -g ios-deploy --unsafe-perm