集成的Pod工程中没有Framework相关代码
Closed this issue · 31 comments
我现在按照文档进行一步一步的设置,pod install也成功了,pod bin list也能看到二进制的podspec。但是在install的工程中二进制组件只有目录,目录中没有最终的Framework的代码。这个可能是什么问题呢?
@edison0951 能贴下你的二进制 podspec 、podfile 么?你是在新建的 demo 工程里面用 ?
我弄了一个测试工程,下面这个是我用pod bin create生成的二进制podspec
{
"name": "DZLoan",
"version": "1.12.0",
"summary": "业务组件",
"description": "业务组件 framework",
"license": "",
"homepage": "http://coding.net/iOS/Loan_Pod",
"authors": {
"edison0951": "edison0951@gmail.com"
},
"platforms": {
"ios": "8.0"
},
"source": {
"http": "http://localhost:8000/framework/download/DZLoan/1.12.0.zip",
"type": "zip"
},
"frameworks": [
"UIKit",
"Foundation",
"Security",
"SystemConfiguration",
"CFNetwork",
"QuartzCore",
"CoreGraphics",
"AddressBook"
],
"compiler_flags": [
"-ObjC",
"-all_load",
"$(inherited)"
],
"resources": [
"DZLoan.framework/Resources/*.{bundle}",
"DZLoan.framework/Versions/A/Resources/*.{bundle}"
],
"vendored_frameworks": "DZLoan.framework",
"dependencies": {
"IQKeyboardManager": [
"~> 5.0"
],
"SDWebImage": [
"~> 4.3"
],
"AFNetworking": [
"~> 3.1"
],
"Masonry": [
"~> 1.0"
],
"DZNEmptyDataSet": [
"~> 1.8"
],
"YYModel": [
"~> 1.0"
],
"SDCycleScrollView": [
"~> 1.7"
]
},
"source_files": [
"DZLoan.framework/Headers/*",
"DZLoan.framework/Versions/A/Headers/*"
],
"public_header_files": [
"DZLoan.framework/Headers/*",
"DZLoan.framework/Versions/A/Headers/*"
]
}
是不是我的resource的路径写的有问题?DZLoan.framework/Versions/A/Resources/*.{bundle}这个是pod lib自动生成的
二进制 podspec 没问题,可以 install 成功说明zip包没问题,如果你是用 pod bin repo push 发布的,那 podspec 里面的字段设置也没问题
cat ~/.cocoapods/bin.yml 和 cat Podfile 呢?
cat ~/.cocoapods/bin.yml
---
code_repo_url: git@coding.net:Team/DZSpecs.git
binary_repo_url: git@coding.net:Team/DZSpecs-binary.git
binary_download_url: http://localhost:8000/framework/download/%s/%s.zip
download_file_type: zip
但是Pods里面没有Framework内容,只是一个空的文件夹
cat Podfile
source 'git@coding.net:iOS/DZSpecs.git'
source 'https://github.com/cocoapods/specs.git'
inhibit_all_warnings! #忽略所有警告
target 'Demo' do
plugin 'cocoapods-bin'
use_binaries!
pod 'SSZipArchive', '~> 2.1.1.2'
pod 'UIAlertView+Block', '~> 1.1.0'
pod 'YYImage'
pod 'YYImage/WebP'
pod 'YYWebImage'
pod 'DTCoreText', '1.6.21.6'
pod 'DZLoan', '1.12.0'
end
@edison0951
现在暂时没想到原因,我也没有复现这个问题,
你可以先用这个例子跑下看 https://github.com/for-example-test/cocoapods-bin-example
二进制 podspec 没问题,可以 install 成功说明zip包没问题,如果你是用 pod bin repo push 发布的,那 podspec 里面的字段设置也没问题
cat ~/.cocoapods/bin.yml 和 cat Podfile 呢?
忘了说了,我不是用pod bin repo push的,我只直接把podsepc放入二进制的podspec仓库的,然后git提交上去的,和这个有关系吗?
最好确保 lint 通过
pod bin spec lint 这个不支持source参数吗?
spec lint 有问题,升级一个版本了
可以直接用 repo push
不过最好还是能把需要用到的库全部放在私有源里面,这样快
我的文件路径是:http://localhost:8000/framework/download/DZLoan/1.12.0.zip
yml里面写的是binary_download_url: http://localhost:8000/framework/download/%s/zip。
这样是对的吗?
我刚刚按你的demo改了下路径,
http://localhost:8000/framework/download/DZLoan/1.12.0/1.12.0.zip
bin.yml里面的路径是:binary_download_url: http://localhost:8000/framework/download/%s/%s/zip。
按这种方式,我的第一个二进制包下载下来了,但是里面的resource资源却没有,不知道是不是这个时候下载报错了,其他几个二进制包里面内容还是空的。
资源文件你去 Pods 下对应目录的 framework 看,里面有没有对应文件
如果本地 Pods 已经有对应的目录文件, 需要删除掉对应目录, cocoapods 才会重新去缓存或者远程拉
~/Library/Cache/Cocoapods里面这个对应的版本就是空的,所以感觉是不是pod bin在做zip下载的时候报错了,后面的就不执行了
bin 只做了切换 podspec 处理,缓存更新下载机制还是用的 cocoapods 的,也就是如果 zip 下载报错,那 install 就失败了。
运行 install 可以加 --verbose 看日志情况
我看了pod install --verbose日志
Http download
$ /usr/bin/curl -f -L -o /var/folders/fx/1prt3hbs5c16_l00x9k1cshm0000gn/T/d20190523-11551-1aoqxc1/file.zip
http://localhost:8000/framework/download/DZWallet/2.20.0/2.20.0.zip --create-dirs --netrc-optional --retry 2
也没看到下载失败,但是framework下啥也没有。我用的是mac自带的apache服务器
gem list cocoapods
输出看下?如果我给的 Demo 可以在你机器上正常运行,你清除下缓存再试你的工程看看。还有如果可以的话,你可以发个你说资源没有的 framwork zip 包给我看下?
我怎么发给你,你的demo工程是可以跑的
建个仓库,加我 member,到时候需要交流什么文件可以直接发到仓库里
好的
我刚刚又跑了下你的demo,发现你那下载日志是这样
/usr/bin/curl -f -L -o /var/folders/fx/1prt3hbs5c16_l00x9k1cshm0000gn/T/d20190524-38659-1evqmji/file.zip
http://localhost:8080/frameworks/OCHooking/0.1.1/zip --create-dirs --netrc-optional --retry 2
你那的压缩文件名字就叫zip?
还有个区别是我的所有压缩文件都包括的resource_bundles,压缩文件的名字都是用0.1.1之类的
我这的下载日志是这样的:
/usr/bin/curl -f -L -o /var/folders/fx/1prt3hbs5c16_l00x9k1cshm0000gn/T/d20190524-26371-kd52jo/file.zip
http://localhost:3000/framework/download/DZLoan/1.12.0/1.12.0.zip --create-dirs --netrc-optional --retry 2
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
那个是 url ,实际的文件名是 OCHooking.framework.zip ,组件二进制文件保存目录层级和私有源一致,只不过里面不是 podspec,是 zip 文件
resource_bundles 资源经过打包后,最终会以 bundle 形式放在 framework 的 Resources 目录下,实际就变成了 resources 字段,也就是
"resources": [
"DZLoan.framework/Resources/*.{bundle}",
"DZLoan.framework/Versions/A/Resources/*.{bundle}"
],
你可以先不加插件,直接自己写二进制 podspec 试试,就像 bugly 这些三方库一样,只是 source 改成 http ,加个 vendored_framework ,然后根据 url 去你自己的静态服务器下 zip 文件。如果在没有插件的情况下,install 的工程中对应的组件资源还是有问题,你要看下是不是 zip 包出问题了。
注意我的 zip 包解压之后就是 framework 文件,没有中间目录。
pod bin repo push
成功了么?
pod bin repo push没有成功,我先按你说的方式来试试
我试了下,应该是podspec和我们自己二进制包输出的方式不一样导致的。我换成我们自己的podspec,然后修改了source链接,改成http,就可以install成功
那压缩 framework 时,去除中间目录应该就可以了
主要还是podspec里面声明的结构有问题
如果你要自定义的 vendored_frameworks 路径,你需要自己创建 binary-template 文件
所以为了能够自动化处理,最好还是使用插件模版的路径, binary-template 更多的是给 subspec 用的
恩,还有个问题,现在用pod bin spec 生成的二进制podspec中,默认的resource和resource bundle都是在framework里面?
framework 就是二进制文件 + 资源 + 其他,本身就推荐在里面放资源,所以生成的 podspec 默认都指向里面的路径
了解