前几天硬盘坏了。然后换了硬盘,重装了黑苹果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 后发现,
不难看出,就是一个可以读取资源的属性,删除属性,设置属性的东西。
怎么用?
- 在终端里 ,进入到编译生成的文件夹,(刚才报错有提示的)
cd /Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxx-eqhusgkiobhnzebfejacuctmahga/Build/Products/Debug-iphonesimulator/xxxxxx.app
- 使用
ls -al@ png
列出所有的png图片的信息,包含属性
很明显看到有的图片,多了com.apple.FinderInfo属性,应该是当时都是从Finder拉进去的,ps直接生成的。为什么有的没有,有待验证
#to do
- 根据论坛所说的,可能就是这个信息导致的,我们尝试移除它。
- 找到你刚发现的有问题的图片,在工程中的路径,假设我的图片在xxxxxx/xxxxxxx/images/下,在终端进入此目录,执行
xattr -c *.png
,在ls -al@ png
会发现,刚刚的属性已经消失了就是成功了。 - 同理,如果是appIcon出错的,就进入到响应的文件夹(asset下),执行
xattr -c *.png
- Clean , 最好再手动去删除下本地编译生成的文件夹, 比如我的是:"/Users/dadong/Library/Developer/Xcode/DerivedData/xxxxxxx-eqhusgkiobhnzebfejacuctmahga"
- 重新运行。。。搞定了终于。
总结
在本地编译生成的app文件里,便捷的查看所有的资源文件,利用ls -al@ file_names
查看有附带属性的文件,然后根据看到的,去自己的真正工程目录里,找到他们,用命令xattr -c file_names
remove掉属性,搞定。