Xcode运行出现you don’t have permission to view it的原因及解决方案

2,006 阅读3分钟

遇到的问题

前不久,群里的好几个小伙伴出现了这个问题,都是老项目升级到Xcode12出现的问题。

这个问题一眼看上去是没有权限引起的,但我想Xcode不会那么傻,自己生成的可执行文件能不给执行权限?点开detail看下:

找到显示的路径并显示包内容,结果没有执行文件。Xcode并没有生成可执行文件,我第一反应就是arch那块设置出了问题

关于EXCLUDED_ARCHSVALID_ARCHS

EXCLUDED_ARCHS是Xcode12新出的字段,表示的是你不要编译的arch,其余苹果需要的自动会被编译。VALID_ARCHS是Xcode12以前的字段,表示的是允许编译的arch。个人觉得EXCLUDED_ARCHS会比较有优势,一旦苹果推出新的cpu arch,那么不需要你自己添加,自动会帮你添加并编译。

在Xcode12上新建项目,已经不会出现VALID_ARCHS字段了,老项目如果没有设置过VALID_ARCHS,跑到Xcode12上会自动消失。但如果你设置过VALID_ARCHS,那么该字段会被保留,并移动到了User-Defined模块,Build Settings中拖到最下面就能找到了。

分析原因

群里的问题发现了2种原因:

  • 第一种:老项目VALID_ARCHS以前设置了arm64等,但是更新到Xcode12后,逻辑和以前不一样了,你还得自己添加x86_64,不然x86_64并不会添加到编译,所以运行模拟器的时候,就会报题目中的错,因为x86_64的可执行文件并没有生成。

  • 第二种:因为出了M1芯片的Mac电脑,所以Xcode12多了一个模拟器版的arm64架构。但很多项目中含有静态包(.a文件),这些静态包中并没有支持这种架构,所以在模拟器运行的时候出错了,这时候小伙伴直接在EXCLUDED_ARCHS中简单的添加了arm64,这样虽然模拟器中运行正常了,但是真机运行的时候就会报题目中的错,因为arm64的可执行文件并没有生成。

如何解决

  1. 如果项目中包含VALID_ARCHS,把这个字段彻底删干净。找到你项目的.xcodeproj文件,右键显示包内容,打开project.pbxproj,搜索VALID_ARCHS,将搜索的所有VALID_ARCHS整行删除就行了。

  2. 正确设置EXCLUDED_ARCHS字段,如果你的电脑不是arm64架构的(目前就M1芯片的),照着如下设置就行:

其他可能出现这个报错的原因及解决

在网上搜寻的时候发现另一种问题,还是找到刚才detail中显示路径文件的包内容,里面info.plist文件中Executable file的值和可执行文件的名字不一样了,这样导致运行的时候找不到可执行文件,也会报题目中的错误。解决方案就是把项目中info.plist的Executable file改成和可执行文件名字一样就行了。