利用cocopods管理本地私有库遇到的问题

一、拉取团队的项目后,运行提示无权限

The file couldn't be opened because you don't have permission to view it
点击pod中的类,得到如下提示

WechatIMG4.png

可以尝试以下几个方案:
(1):清除缓存
xcode->preferences->Derived Data .然后删除这个Derived Data文件夹
再clean一下,然后再运行

(2):从工程外导入文件时,有一个要注意的地方,


WechatIMG5.png

导入的文件会变蓝色


WechatIMG6.png

如果换一种方式导入


WechatIMG7.png

导入的文件为黄色


WechatIMG8.png

因为勾选folder references一栏,只是单纯有引用,但文件路径不明确,没有实际加入到工程中来,所以可能造成问题。

(3):我的问题的解决方案
打开设置,选择安全性与隐私,并按照下图操作:


WechatIMG9.png
二、项目中图片加载不出来,从接口中发现图片url为http

xCode 配置允许HTTP请求

info.plist里面增加:
App Transport Security Settings 属性
再在此属性内增加Allow Arbitrary Loads,并设置值为YES

三、'libxml/tree.h' file not found

pod本地私有库,需要依赖系统的library----> libxml2
推荐使用方法1
(1)在本地库的podspec中添加

spec.libraries =  "xml2"
spec.pod_target_xcconfig = {'HEADER_SEARCH_PATHS' => '${SDK_DIR}/usr/include/libxml2'}

(2)手动添加引用
首先检查
我们要在Build Setting中搜索other linker,在这里面添加:
若引用的libxml2.tbd,添加-lxml2
若引用libz.dylib,则添加-lz
然后,
在本地私有库的Build Setting中搜索Header Search Paths,添加路径:
${SDK_DIR}/usr/include/libxml2
这样做的缺陷是每次重新pod install,都需要重新手动添加。

这里有一个细节,
spec.pod_target_xcconfig设置的是当前库的Build Settings,这里对应的是本地私有库。
spec.user_target_xcconfig设置的是project中的Build Settings,即在运行的target中的Build Settings。这个在Cocoapods的官网上不建议使用,官网说设置这个有可能会和工程中本身的设置造成冲突。

四、CocoaPod出现target overrides the OTHER_LDFLAGS build setting defined in Pods/Target Support的解决方案

利用cocopods管理多个三方库及本地库,pod install后报错

[!] The `AllBlue [Debug]` target overrides the `OTHER_LDFLAGS` build setting defined in Pods/Target Support Files/Pods/Pods.debug.xcconfig. This can lead to problems with the CocoaPods installation

Use the `$(inherited)` flag, or
Remove the build settings from the target.

意思就是target的设置覆盖了 pod的设置。

解决方案:
Build Settings -> Other linker flags 中添加$(inherited)

五、关于本地私有库中图片的加载问题

尽量将图片等资源打包成bundle文件, 这样有效的防止了资源文件命名的冲突, 引用方法
可以尝试:

NSBundle *bundle = [NSBundle bundleForClass:["pod中随意一个类" class]];
NSURL *bundleURL = [bundle URLForResource:@"bundle文件名" withExtension:@"bundle"];
NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];
UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

先拿到该pod下随意一个类的bundle(该bundle与资源文件是一个bundle), 
再根据该bundle找到bundle资源文件的路径, 最后使用资源文件.

另外可以hook imageNamed:方法

六、引用外部静态库(.a文件)时或打包.a时,Category方法无法调用。

Targets选项下有Other linker flags的设置为 -ObjC

下面逐个介绍3个常用参数:
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load: 会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很 有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

七、

(1):如果一个本地库需要import其他库的头文件,
需要设置其podspec中spec.dependency添加依赖,才能正确索引到。

(2):pod中引入多个库,如果出现相同的类名,编译会报错,有冲突。
pod库中不允许出现相同的类,需要更改类名,或者删除。但是,如果pod库中与target中同时包含相同的类,编译不报错。

(3):利用cocopods导入三方库或者本地库,打包.a文件时,添加Public Headers是无法添加库中头文件的,只能添加target中的.h文件。

八、制作.a

1.创建新工程 Cocoa Touch Framework文件,第二个是静态库文件,也就是我们常说的.a文件。
2.将自动生成的.h,.m文件删掉
3.将所需文件加入静态库工程中。
4.下面进行整个工程的配置:

       4.1、TARGETS - >Build Settings -> Architectures:添加 armv7s;
 增加armv7架构
       4.2、 "Build Active Architecture Only" 设置为 "NO"

注:Build active Architecture Only为什么设置为NO?

在目标设备上,执行设备对应的指令集。Build active Architecture Only 设置为YES,只会选择编译、链接对应的指令集,设置为NO时,会涵盖所有指令集,在必要的时候选择执行对应的指令集。所以一般在Debug时会选择设置为YES(效率会高点,虽然也没什么卵用),Release时会选择设置为NO,以支持所有可能的架构。

      4.3、"Mach-O Type" 设置为 "Static Library"  默认为动态库 ,苹果审核不通过。
      4.4、"iOS Deployment Target" 设置为 "iOS 9.0" ,这是支持最低运行iOS系统版本(可自行选择,但是要注意的是,iOS SDK中,已经废弃的方法,这个需要配合 Base SDK 设置)。

5.下面我们将头文件(.h)暴露在外,实现文件(.m)隐藏起来,如下:

TARGETS - >Build Settings -> Build Phases中,将Headers中的Project内的头文件拖到Public中。

6.制作.a文件

来到工程目录树,Products下的文件都是红色的,现在我们选中.a文件,分别真机和模拟器运行一遍(成功运行),然后Show in Finder 找到对应的 .a文件(上级目录可以看出是真机还是模拟器文件夹),真机和模拟器运行成功的文件是在这俩个文件夹内的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容