oynix

人生需要一些摸鱼时刻,做什么都可以,不做什么也可以

Unity导出XCode Workspace项目

XCode中,Project和Workspace的关系就类似于.net里Project和Solution。现在Unity的外部依赖一般都在用EDM4U管理,也就是External Dependency Manager For Unity,EDM可以选择导出项目的类型。

EDM4U Github地址

各个版本EDM4U UnityPackage

1. 导出Project或Workspace

1
2
3
4
5
6
7
8
9
10
Integration Strategies

The `CocoaPods` are either:

- Downloaded and injected into the Xcode project file directly, rather than creating a separate xcworkspace. We call this `Xcode project` integration.

- If the Unity version supports opening a xcworkspace file, the `pod` tool is used as intended to generate a xcworkspace which references the CocoaPods. We call this `Xcode workspace` integration.


The resolution strategy can be changed via the `Assets > External Dependency Manager > iOS Resolver > Settings` menu.

按照官方的介绍,既可以选择Project的方式,也可以选择Workspace的形式,前提是Unity的版本要支持这种形式。这里建议使用Worksapce,也是默认选项,因为比较方便,并且灵活性高些。

2. 导出XCode项目

这个没有什么特别需要注意的,按照正常的步骤导出即可。导出成功后,在项目根目录应该会看到一个xcodeproj结尾的文件,以及一个名字是Podile的文件,前者是我们的Unity项目,后者是项目所涉及的依赖,在项目根目录下执行以下命令,即可将所有依赖下载到项目中,

1
pod install --verbose

后面的verbose参数可加可不加,建议加上,因为可以看到具体信息,受到网络因素影响,pod命令经常卡住不动,这个时候就可以看到具体的原因。

经过不确定次数的观察,卡住的时候多是在安装一些特殊的依赖库,比如Facebook,比如Firebase。如果有代理,那么就很好打破这种尴尬的处境,先把代理挂上,再执行install命令就好,如果没有代理,下面会说下如何更换pod的源,

1
2
3
$ 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

$ pod install

我的代理挂在端口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
2
3
4
5
6
7
$ brew install cocoapods

$ pod --version
1.15.2

$ ruby --version
ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]

4. Podfile

上面提到过,从Unity导出XCode工程后,项目根目录会有个Podfile文件,这里面是项目所涉及的依赖,这个文件结构很清晰明了,直接写了依赖的名字以及版本,第一句指明的则是安装源,我导出的项目默认使用的是这个,

1
source 'https://cdn.cocoapods.org/'

除了这个cocoapods的cdn,还有可能会看到以下这些,

1
2
3
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'

source 'https://github.com/CocoaPods/Specs.git'

source后面的每个地址,都对应着~/.cocoapods/repo/下的一个目录,表示一个pod的一个仓库。仓库里面包含里很多依赖库的信息,其中包含依赖库的名字、版本、介绍、下载地址、依赖的其他仓库,等等。通过repo命令可以看到当前配置里几个源,

1
$ pod repo list

此外还可以增加、删除、更新源,

1
2
3
4
5
$ pod repo add [repoName]

$ pod repo remove [repoName]

$ pod repo update [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
------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.net/2024/02/634010e2a2fb/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道