Xcode8.1真机正常运行,模拟器报错/usr/bin/codesign failed

前几天硬盘坏了。然后换了硬盘,重装了黑苹果10.12.1 macOS Sierra,xcode从8.0 ->8.1

公司有两个项目,一个项目正常。另外一个项目出问题了。我也是纳闷了,真机竟然可以,模拟器不行,证书配置了都没错。而且,之前都是没问题的!

报错如下:


CodeSign /Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxx-eqhusgkiobhnzebfejacuctmahga/Build/Products/Debug-iphonesimulator/xxxxxx.app

cd /Volumes/soft/xxxxxx

export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate

export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

Signing Identity:"-"

/usr/bin/codesign --force --sign - --timestamp=none /Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxx-eqhusgkiobhnzebfejacuctmahga/Build/Products/Debug-iphonesimulator/xxxxxx.app

/Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxx-eqhusgkiobhnzebfejacuctmahga/Build/Products/Debug-iphonesimulator/xxxxxxx.app: resource fork, Finder information, or similar detritus not allowed

Command /usr/bin/codesign failed with exit code 1

我谷歌后发现有几个方案:

  • 更新cocopods. 有一篇简书作者也遇到同样问题,他采用了这个方案解决了。但我的系统刚装的,所有的环境,软件等都是最新的,没有道理的。然后我还是试过了, clean - delete DerivedData ,重新运行,老样子
  • 在xcode - target - build setting - package - info file里面新增一个空的info plist文件,我没试过
  • 使用xattr -c 帖子是https://forums.developer.apple.com/thread/48905

xattr是什么,在Terminal输入xattr -help 后发现,


xattr 说明

不难看出,就是一个可以读取资源的属性,删除属性,设置属性的东西。

怎么用?

  1. 在终端里 ,进入到编译生成的文件夹,(刚才报错有提示的)
    cd /Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxx-eqhusgkiobhnzebfejacuctmahga/Build/Products/Debug-iphonesimulator/xxxxxx.app
  2. 使用ls -al@ png列出所有的png图片的信息,包含属性

图片的属性 有差别

很明显看到有的图片,多了com.apple.FinderInfo属性,应该是当时都是从Finder拉进去的,ps直接生成的。为什么有的没有,有待验证 #to do

  1. 根据论坛所说的,可能就是这个信息导致的,我们尝试移除它。
  • 找到你刚发现的有问题的图片,在工程中的路径,假设我的图片在xxxxxx/xxxxxxx/images/下,在终端进入此目录,执行xattr -c *.png ,在ls -al@ png会发现,刚刚的属性已经消失了就是成功了。
  • 同理,如果是appIcon出错的,就进入到响应的文件夹(asset下),执行xattr -c *.png
  1. Clean , 最好再手动去删除下本地编译生成的文件夹, 比如我的是:"/Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxxx-eqhusgkiobhnzebfejacuctmahga"
  2. 重新运行。。。搞定了终于。

总结

在本地编译生成的app文件里,便捷的查看所有的资源文件,利用ls -al@ file_names查看有附带属性的文件,然后根据看到的,去自己的真正工程目录里,找到他们,用命令xattr -c file_names remove掉属性,搞定。

推荐阅读更多精彩内容