闲来无事,将自己的一个iOS项目支持Carthage,遇到一些问题记录于此
- Carthage 只能支持动态库即 Dynamic Frameworks(iOS 8以上)。
新建一个Xcode工程并选择Cocoa Touch Framework模板。
将源文件,资源文件,加入工程,编译,通过。
-
Carthage要求工程的Scheme必须为Shared。
Xcode -> Product -> Scheme -> Manage Schemes...
设置Scheme为Shared
carthage update 时,如遇到错误提示Dependency "xxx" has no shared framework schemes 说明工程的scheme没有被标记为shared,原因可能是git忽略了对应的工程文件。检查gitignore
确保此文件未被忽略 xxx.xcodeproj/xcshareddata/xcschemes/xxx.xcscheme
gitignore.io生成的gitignoe(macOS,Xcode,Swift,Carthage)会有
### Swift.SwiftPackageManager Stack ###
Packages
.build
xcuserdata
# *.xcodeproj 这句注释掉
修改一下就好,因为后面还有:
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
-
Carthage 默认通过Tag来获取源码版本进行编译,所以必须将要发布的版本打上Tag,否则会提示No tagged versions found for github xxx。不过也可以指定版本 "master",来获取当前最新代码。
-
最后要注意 class 的Access Levels:需要从其他模块访问的属性,方法至少需要public
-
carthage几个常用的命令:
- update 根据文件
Cartfile
重新构建所有依赖,文件Cartfile.resolved
将重新生成,然后去下载对应的源代码并编译。 - bootstrap 根据文件
Cartfile.resolved
锁定的版本构建依赖,下载对应的源代码并编译。 - build 不重新下载源代码,在现有版本源代码基础上(可以经过修改)编译 。
- update 根据文件
-
几个常用的参数:
- --platform 只编译指定平台的版本,比如,ios
- --no-use-binaries 不使用预编译的二进制版本,从源码编译
-
有时候update不能获取最新的版本,可以试试清除缓存
rm -rf ~/Library/Caches/org.carthage.CarthageKit
网友评论