之前在想要运行项目Demo的期间,遇到了很多问题,也在上面花费了不少时间。因此在这里记录一下运行iOS项目的基本流程和一些通用问题。
git相关
1. 安装Homebrew及git
Homebrew是macOS上的免费开源软件包管理器,能帮助用户更轻松安装、更新和管理第三方软件包,后面还会用到。在终端执行命令:
brew -v |
如果已经安装了Homebrew,将看到Homebrew的版本号。如果没有,就按照官方文档中的说明进行安装。安装好后再通过Homebrew安装git:
brew install git |
安装完毕后执行:
git -v |
如果显示git的版本号,则表示已成功安装。
2. 生成ssh密钥,克隆仓库到本地
主要是要将生成的ssh密钥内容复制到GitLab中,之后就可以将项目仓库克隆到本地了。
3. 可以下载开源的可视化版本控制工具SourceTree,帮助版本管理。
Cocoapods相关
4. 更新Ruby
这一步还挺重要的,之前使用默认的Ruby版本,导致在下载安装依赖库环节一直报错,后续卸载Cocoapods、更新Ruby版本、重装Cocoapods才解决。使用Homebrew来安装新版Ruby:
Brew install ruby |
安装完成后查看Ruby版本:
ruby -v |
可能会出现两个版本,一个是Homebrew安装的新版,另一个是系统自带的旧版,Homebrew会提示按路径切换版本。当时执行的命令如下:
echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc |
之后验证下是否切换到新版Ruby即可:
ruby -v |
5. 安装Cocoapods
Cocoapods是专为iOS和macOS开发而设计的依赖库管理工具。可以先查看电脑有没有安装Cocoapods:
pod --version |
如果提示没有找到名为pod的命令,则需要安装Cocoapods,安装指定版本(如1.10.2版本)的Cocoapods的命令为:
sudo gem install cocoapods -v 1.10.2 |
如果已有的Cocoapods不是想要的版本,则需要先卸载再安装指定版本的Cocoapods,卸载命令如下:
sudo gem install cocoapods |
再根据提示输入Yes卸载对应的版本。
6. 安装Cocoapods相关组件
阅读项目中的Podfile文件,开头会有需要的组件名称,逐个安装即可。
sudo gem install cocoapods-binary |
7. 安装依赖库并更新本地的Pod仓库
在终端执行命令:
pod install --repo-update |
如果出现报错,首先检查是否更新了自己的ruby版本,见第4步;如果提示缺少必要Cocoapods组件,则按照第6步安装。
8. 一些问题及解决办法
<1> 报错:
[!] `PromisesObjC` requires CocoaPods version `>= 1.12.0`, which is not satisfied by your current version, `1.10.2`. |
解决办法:
之前成功pod install --repo-update之后,调试过程中删除了一些依赖库,再执行pod install --repo-update时报了这个错误。如果要保持Cocoapods版本不变,则重新从git上拉代码进行覆盖,再安装依赖库即可。
<2> 警告:
[!] Found multiple specifications for `***`: |
解决办法:
该警告表示CocoaPods本地仓库中存在多个相同版本的podspec文件。删除多余的仓库即可解决,例如在这里执行:
pod repo remove cocoapods |
<3> 警告:
[!] The '*** [Debug]' target overrides the 'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES' build setting defined in `***.release.xcconfig'. This can lead to problems with the CocoaPods installation
|
解决办法:
这些警告表明Target配置覆盖了 CocoaPods 生成的 xcconfig 文件中的 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES 设置,可能会有潜在问题。可以在Xcode中使用 $(inherited) 标志来继承 CocoaPods 的配置。
在Xcode中的具体方法为:选择项目文件->选择TARGETS中的目标->Build Settings->搜索Always Embed Swift Standard Libraries->在Debug和Release配置中,将当前值改为 $(inherited)。
<4> 有些情况下,清除Cocoapods的缓存是有用的:
pod cache clean -all |
Xcode相关
9. 运行项目(在模拟器上)
<1> 报错:
/Users/*** 'Masonry/Masonry.h' file not found |
解决办法:
这个报错表示库文件没有正确安装或集成到项目中。解决方法是先在电脑中搜索到该.h文件,之后将文件路径加入到Xcode的搜索路径中。
具体为:选择项目文件->选择TARGETS中的目标->Build Settings->Search Paths->将Always Search User Paths (Deprecated)置为Yes->将路径添加到User Header Search Paths。
<2> 报错:
报大量类似错误,例如其中一个为:
Multiple commands produce '/Users/***/Library/Developer/Xcode/DerivedData/***.h' |
解决办法:
这是由于多个构建操作试图生成或复制相同的文件导致的,这里多个路径指向同一个目标文件,从而产生冲突。需要删除多余的路径。
具体为:在项目资源管理器中选择Pods->选择TARGETS中出现问题的目标->Build Phases->Compile Sources->删除所有多余的同名文件。
<3> 报错:
SDK does not contain 'libarclite' at the path '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a'; try increasing the minimum deployment target |
解决办法:
这是Xcode版本和项目最低部署目标(Minimum Development Target)之间不兼容导致的,可以通过增加最低部署目标解决,这里都设置为iOS 10.0。
具体为:在项目资源管理器中选择Pods->选择TARGETS中所有目标->Build Settings->Deployment->iOS Deployment Target->Other..->输入10.0(注意不是输入iOS 10.0)。
<4> 报错:
Building for 'iOS-simulator', but linking in object file (/Users/gaozhangchi/Codes/SSZVideoUploadFramework/SSZVideoUploadFramework/Classes/Tencent/COSSDK/libmtasdk.a[arm64]2) built for 'iOS' |
解决办法:
(模拟器debug运行或直接打包不会报这个错)
报错原因是在Xcode12之后,苹果废除了32位应用,而所运行项目SDK还是32位。具体解决办法为:选择项目文件->选择TARGETS中的目标->Build Settings->Architectures->设置Build Active Architecture Only为No;在Excluded Architectures项添加上arm64。
⚠️值得注意的是,使用这个方法后,真机测试时又会报错...因此总结如下:
1️⃣模拟器Release模式:设置Build Active Architecture Only为No;在Excluded Architectures项添加上arm64;
2️⃣模拟器Debugu模式、真机测试、打包上架:还原Build Active Architecture Only为Yes;删除Excluded Architectures项后面的arm64。
<5> 报错:
Unsupport Swift architecture |
解决办法:
报错原因是某些Swift模块不支持当前构建架构,通过在Rosetta下运行可以解决。设置Rosetta的具体方法为:Product(顶部菜单栏)->Destination->选择Show All Run Destinations->在下方iOS Simulators里选择带(Rosetta)的模拟器。
<6> 有些情况下,清理Xcode的Build folder和Derived Data会解决一些奇怪的问题...
清理Build Folder的方法:Product(顶部菜单栏)->Clean Build Folder…。
清理Derived Data的方法:Xcode(顶部菜单栏)->Settings…->Locations->Locations->Derived Data下方路径右边的箭头,即会在访达中显示Derived Data文件夹->关闭Xcode->删除Derived Data文件夹下的所有内容。
10. 真机测试
步骤:
1️⃣打开iPhone->设置->隐私与安全性->安全性->将开发者模式打开;
2️⃣打开Xcode->Xcode(顶部菜单栏)->Accounts->添加自己的Apple ID;
3️⃣打开Xcode->用数据线将iPhone连接至电脑,双端都选择信任即可。
<1> iPhone提示“不受信任的开发者”
解决办法:打开iPhone->设置->通用->VPN与设备管理->配置描述文件,选择信任即可
<2> 报错:
iPhone is not available because it is unpaired,Pair with the device in the Xcode Devices Window, and respond to any pairing prompts on the device. |
解决办法:
报错原因是没能正常配对。首先退出Xcode,断开iPhone连接;再在终端执行sudo pkill usbmuxd;最后重新打开Xcode,连接iPhone,一般就可以解决。