一滨达、拉取團隊的項目后,運行提示無權(quán)限
The file couldn't be opened because you don't have permission to view it
點擊pod中的類,得到如下提示
可以嘗試以下幾個方案:
(1):清除緩存
xcode->preferences->Derived Data
.然后刪除這個Derived Data
文件夾
再clean一下,然后再運行
(2):從工程外導入文件時,有一個要注意的地方描睦,
導入的文件會變藍色
如果換一種方式導入
導入的文件為黃色
因為勾選folder references一欄,只是單純有引用导而,但文件路徑不明確忱叭,沒有實際加入到工程中來,所以可能造成問題嗡载。
(3):我的問題的解決方案
打開設(shè)置窑多,選擇安全性與隱私,并按照下圖操作:
二洼滚、項目中圖片加載不出來埂息,從接口中發(fā)現(xiàn)圖片url為http
xCode 配置允許HTTP請求
在info.plist
里面增加:
App Transport Security Settings
屬性
再在此屬性內(nèi)增加Allow Arbitrary Loads
,并設(shè)置值為YES
三遥巴、'libxml/tree.h' file not found
pod本地私有庫千康,需要依賴系統(tǒng)的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摆霉,都需要重新手動添加豪椿。
這里有一個細節(jié)奔坟,
spec.pod_target_xcconfig
設(shè)置的是當前庫的Build Settings,這里對應的是本地私有庫搭盾。
spec.user_target_xcconfig
設(shè)置的是project中的Build Settings咳秉,即在運行的target中的Build Settings。這個在Cocoapods的官網(wǎng)上不建議使用鸯隅,官網(wǎng)說設(shè)置這個有可能會和工程中本身的設(shè)置造成沖突澜建。
四、CocoaPod出現(xiàn)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的設(shè)置覆蓋了 pod的設(shè)置炕舵。
解決方案:
在Build Settings -> Other linker flags
中添加$(inherited)
五、關(guān)于本地私有庫中圖片的加載問題
盡量將圖片等資源打包成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),
再根據(jù)該bundle找到bundle資源文件的路徑, 最后使用資源文件.
另外可以hook imageNamed:
方法
六跟畅、引用外部靜態(tài)庫(.a文件)時或打包.a時咽筋,Category方法無法調(diào)用。
Targets選項下有Other linker flags
的設(shè)置為 -ObjC
碍彭。
下面逐個介紹3個常用參數(shù):
-ObjC
:加了這個參數(shù)后晤硕,鏈接器就會把靜態(tài)庫中所有的Objective-C類和分類都加載到最后的可執(zhí)行文件中
-all_load
: 會讓鏈接器把所有找到的目標文件都加載到可執(zhí)行文件中,但是千萬不要隨便使用這個參數(shù)庇忌!假如你使用了不止一個靜態(tài)庫文件,然后又使用了這個參數(shù)舰褪,那么你很 有可能會遇到ld: duplicate symbol
錯誤皆疹,因為不同的庫文件里面可能會有相同的目標文件,所以建議在遇到-ObjC
失效的情況下使用-force_load
參數(shù)占拍。
-force_load
:所做的事情跟-all_load
其實是一樣的略就,但是-force_load
需要指定要進行全部加載的庫文件的路徑,這樣的話晃酒,你就只是完全加載了一個庫文件表牢,不影響其余庫文件的按需加載
七、
(1):如果一個本地庫需要import其他庫的頭文件贝次,
需要設(shè)置其podspec中spec.dependency
添加依賴崔兴,才能正確索引到。
(2):pod中引入多個庫蛔翅,如果出現(xiàn)相同的類名敲茄,編譯會報錯,有沖突山析。
pod庫中不允許出現(xiàn)相同的類堰燎,需要更改類名,或者刪除笋轨。但是秆剪,如果pod庫中與target中同時包含相同的類赊淑,編譯不報錯。
(3):利用cocopods導入三方庫或者本地庫仅讽,打包.a文件時陶缺,添加Public Headers是無法添加庫中頭文件的,只能添加target中的.h文件何什。
八组哩、制作.a
1.創(chuàng)建新工程 Cocoa Touch Framework文件,第二個是靜態(tài)庫文件处渣,也就是我們常說的.a文件伶贰。
2.將自動生成的.h,.m文件刪掉
3.將所需文件加入靜態(tài)庫工程中罐栈。
4.下面進行整個工程的配置:
4.1黍衙、TARGETS - >Build Settings -> Architectures:添加 armv7s;
增加armv7架構(gòu)
4.2荠诬、 "Build Active Architecture Only" 設(shè)置為 "NO"
注:Build active Architecture Only為什么設(shè)置為NO琅翻?
在目標設(shè)備上,執(zhí)行設(shè)備對應的指令集柑贞。Build active Architecture Only 設(shè)置為YES方椎,只會選擇編譯、鏈接對應的指令集钧嘶,設(shè)置為NO時棠众,會涵蓋所有指令集,在必要的時候選擇執(zhí)行對應的指令集有决。所以一般在Debug時會選擇設(shè)置為YES(效率會高點闸拿,雖然也沒什么卵用),Release時會選擇設(shè)置為NO书幕,以支持所有可能的架構(gòu)新荤。
4.3、"Mach-O Type" 設(shè)置為 "Static Library" 默認為動態(tài)庫 ,蘋果審核不通過台汇。
4.4苛骨、"iOS Deployment Target" 設(shè)置為 "iOS 9.0" ,這是支持最低運行iOS系統(tǒng)版本(可自行選擇励七,但是要注意的是智袭,iOS SDK中,已經(jīng)廢棄的方法掠抬,這個需要配合 Base SDK 設(shè)置)吼野。
5.下面我們將頭文件(.h)暴露在外,實現(xiàn)文件(.m)隱藏起來两波,如下:
TARGETS - >Build Settings -> Build Phases中瞳步,將Headers中的Project內(nèi)的頭文件拖到Public中闷哆。
6.制作.a文件
來到工程目錄樹,Products下的文件都是紅色的单起,現(xiàn)在我們選中.a文件抱怔,分別真機和模擬器運行一遍(成功運行),然后Show in Finder 找到對應的 .a文件(上級目錄可以看出是真機還是模擬器文件夾)嘀倒,真機和模擬器運行成功的文件是在這倆個文件夾內(nèi)的屈留。