XCode中,Project和Workspace的关系就类似于.net里Project和Solution。现在Unity的外部依赖一般都在用EDM4U管理,也就是External Dependency Manager For Unity,EDM可以选择导出项目的类型。
EDM4U Github地址
各个版本EDM4U UnityPackage
1. 导出Project或Workspace
1 | Integration Strategies |
按照官方的介绍,既可以选择Project的方式,也可以选择Workspace的形式,前提是Unity的版本要支持这种形式。这里建议使用Worksapce,也是默认选项,因为比较方便,并且灵活性高些。
2. 导出XCode项目
这个没有什么特别需要注意的,按照正常的步骤导出即可。导出成功后,在项目根目录应该会看到一个xcodeproj结尾的文件,以及一个名字是Podile的文件,前者是我们的Unity项目,后者是项目所涉及的依赖,在项目根目录下执行以下命令,即可将所有依赖下载到项目中,
1 | pod install --verbose |
后面的verbose参数可加可不加,建议加上,因为可以看到具体信息,受到网络因素影响,pod命令经常卡住不动,这个时候就可以看到具体的原因。
经过不确定次数的观察,卡住的时候多是在安装一些特殊的依赖库,比如Facebook,比如Firebase。如果有代理,那么就很好打破这种尴尬的处境,先把代理挂上,再执行install命令就好,如果没有代理,下面会说下如何更换pod的源,
1 | export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890 |
我的代理挂在端口7890,所以像上面这么写就可以,然后基本就可以成功了。
pod install执行完成之后,会发现项目根目录下多了一个Pods的目录,里面是一堆依赖名字的目录以及一个Pods.xcodeproj文件,这些就是pod命令安装的内容。同时,根目录下还会多出一个xcworkspace的文件。
Workspace文件管理着多个Project,用XCode打开workspace就可以打包了。
3. 安装Pod
如果Google搜索如何安装Pod命令,多半会跳出来不少教人使用gem命令安装pod的文章,而pod又依赖于ruby,所以要先安装ruby,但是Mac自带了一个2.6版本的ruby,为了安装新版本的ruby,所以又要安装rvm,来管理多个版本的ruby,安装完新版本的ruby就可以通过gem安装pod了,这个过程实在是曲折。
先说说这种方式。pod命令是基于ruby的,所以一定需要安装ruby,我还在用系统自带的2.6版本的,可以跑起来,这个应该是和pod的版本有关系,这一点我没有验证。rvm是ruby version manager的缩写,是专门用来管理ruby版本的,而gem是ruby的包管理工具,用来安装和卸载库的,至于pod,则是用ruby写的一个项目,用来管理XCode项目第三方依赖的。
乍一看,是有点乱,如果拿python类比一下也许可以清晰一些,ruby就相当于python,gem则是python的pip,而rvm则是python种的venv。
如果在使用brew管理库,那么上面的过程就可以很简单,直接通过brew安装cocoapods,版本如下,
1 | brew install cocoapods |
4. Podfile
上面提到过,从Unity导出XCode工程后,项目根目录会有个Podfile文件,这里面是项目所涉及的依赖,这个文件结构很清晰明了,直接写了依赖的名字以及版本,第一句指明的则是安装源,我导出的项目默认使用的是这个,
1 | source 'https://cdn.cocoapods.org/' |
除了这个cocoapods的cdn,还有可能会看到以下这些,
1 | source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git' |
source后面的每个地址,都对应着~/.cocoapods/repo/
下的一个目录,表示一个pod的一个仓库。仓库里面包含里很多依赖库的信息,其中包含依赖库的名字、版本、介绍、下载地址、依赖的其他仓库,等等。通过repo命令可以看到当前配置里几个源,
1 | pod repo list |
此外还可以增加、删除、更新源,
1 | $ pod repo add [repoName] |
添加完repo后,初始化环境
1 | pod setup |
当执行pod install后,就会从指定的源里面去找Podfile里每个需要下载的库的地址,然后尝试下载,同一个依赖在不同的源里对应的下载地址可能不一样,有些组织会把那些通过正常方式无法下载的依赖同步到国内,然后提供下载的镜像地址。
所以当发现一个依赖下载卡住时,除了刚刚提到的挂代理,还可以通过改变源,让pod尝试从其他地址下载,有时也可以解决问题。
附录:参考链接
- https://github.com/googlesamples/unity-jar-resolver
- https://juejin.cn/post/7199540426242605112
- https://zhuanlan.zhihu.com/p/52130048
- https://hanleylee.com/articles/various-libraries-in-ios/
- https://blog.csdn.net/u013857988/article/details/116000017
- https://www.jianshu.com/p/ab6411a05bc2
- https://www.cnblogs.com/zhanggui/p/6020519.html
- https://juejin.cn/post/7106313601903755300
- https://www.jianshu.com/p/bf1cbe49cb5d
- https://github.com/rvm/rvm/issues/5379
- https://juejin.cn/post/7152719439299870757#heading-4