開發(fā)SDK 基礎(chǔ)知識儲備!!!!
靜態(tài)庫 和 動態(tài)庫
靜態(tài)庫:以.a 和 .framework為文件后綴名请唱。
動態(tài)庫:以.tbd(之前叫.dylib) 和 .framework 為文件后綴名棵里。
(但是蘋果不讓使用自己的動態(tài)庫,否則審核就無法通過)
Swift不支持靜態(tài)庫只支持動態(tài)庫
決定使用動態(tài)庫
http://www.reibang.com/p/f3b51ec4d8d4
問題!:Swift App工程引入了混合OC+Swift的Swift Framework冷尉,并使用了其中的Swift類,但在編譯App工程時系枪,卻報錯:
'XXXX' is unavailable: cannot find Swift declaration for this class
奇怪了雀哨,Swift代碼調(diào)用Swift Framework中的Swift類,居然找不到申明。
分析了下自己的Framework雾棺,有個過程是自己寫的腳本自動生成Framework的膊夹,并用lipo命令合并了模擬器和真機(jī)的Framework。
然后捌浩,不用合并的Framework而改用單獨(dú)的Framework放刨,結(jié)果,Swift App工程就編譯通過了尸饺。
有一點(diǎn)和oc的framework不同进统,這里需要在target ->General ->Embedded
Binaries 中添加這個framework,添加成功后會自動在Linked Framework and Libraries中自動添加這個framework,如果只在Linked Framework and Libraries中添加這個framework會導(dǎo)致庫無法載入(OC創(chuàng)建的framework應(yīng)該是正常的),項目無法運(yùn)行
http://www.reibang.com/p/13ee670f21ac
http://www.cnblogs.com/xinluqi/p/5941288.html
https://www.gitbook.com/book/leon_lizi/-framework-/details 不支持動態(tài)庫
http://www.cnblogs.com/rayshen/p/5330512.html Swift開發(fā)動態(tài)庫遇到問題
好吧 只能開發(fā)靜態(tài)庫了 決定回去寫OC
1.點(diǎn)擊工程 -> BuildSetting -> 搜索mach -> 改成Static Library
1.1在 build Phases - Headers 設(shè)置公開的.h文件
1.2 other link 使用 -all_load
1.3
編譯前檢查一下是debug模式還是release模式浪听,選擇release模式:
Release-iphoneos 文件夾里面的東西是用在真機(jī)上的
Release-iphonesimulator 文件夾里面的東西是用在模擬器上的
如果 Scheme 是 Debug 模式螟碎,生成的文件夾就以 Debug 開頭
2.合并庫
lipo -create /Users/Travis/Desktop/libIMIUI.d.a /Users/Travis/Desktop/libIMIUI.s.a
-output
3.使用
genneral
Embedded Binaries
Linked 引入
4.#import <test3/MathTools.h> 會有警告
將動態(tài)庫倒入項目并應(yīng)用的時候,后時候回提示missing submodule xxx警告迹栓,到網(wǎng)上查了些資料抚芦,說是要在制作工程時
原因是: header的頭文件沒有全部導(dǎo)入到公共頭文件里面
http://blog.csdn.net/id314846818/article/details/50752379
5.切記內(nèi)部controller命名 一定要用自己的 避免重復(fù)!!
發(fā)現(xiàn)還挺簡單的
調(diào)研結(jié)束
暫時不解釋了
加入 libc++.tbd
libz.tbd
systemConfiguration.framework
PassKit.framework
CFNetwork.framework
//本地plist中加入
//LSApplicationQueriesSchemes
//uppaywallet uppaysdk
other link 加入 -ObjC
終于到了這一步:
來吧合并sdk
Bulid之后,在工程目錄下Produces文件夾下可以看到生成的.a文件引用迈螟,右鍵叉抡,show in finder可以看到.a文件。
要注意Build時的選項:
<1>iOS Device編譯出來的是在Debug-iphoneos目錄下答毫,真機(jī)使用褥民,終端,在該目錄下使用lipo -info **.a 可以查看你到文件類型為armv7等ARM架構(gòu)洗搂。
<2>Simulator時編譯出來的是在Debug-iphonesimulator目錄下消返,模擬器使用,終端查看類型顯示為i386架構(gòu)耘拇。
可以使用lipo命令生成一個通用二進(jìn)制lib.a lipo -create /.a /.a -output /.a 生成一個兼容兩種類型的.a文件撵颊。方法雖好,但是包大小會增加惫叛。
1.打包分清楚是debug與Release的倡勇。
選擇debug與Release在Xcode工具欄的Product選項現(xiàn)則Scheme->Edit Scheme.然后為各個運(yùn)行模式選擇選項。
Debug-iphoneos:應(yīng)用于真機(jī)的靜態(tài)庫文件嘉涌。Debug-iphonesimulator:應(yīng)用于模擬器調(diào)試的靜態(tài)庫文件妻熊。
Release-iphoneos 或Debug-iphoneos :里面的是基于arm6 arm7編譯出來的庫文件。
Release-iphonesimulator:里面是基于i386編譯出來的文件仑最。
Debug版本與release版本區(qū)別在于調(diào)試版本與發(fā)布版本扔役,深度區(qū)別在于其動態(tài)庫的使用。其都是有相應(yīng)的模擬器與真機(jī)模式的靜態(tài)庫文件警医。
最近工作的項目在測試時以debug版本測試沒這問題亿胸,結(jié)果上線發(fā)布時用的release版坯钦,從市場下載下來就出現(xiàn)了一個嚴(yán)重問題,最后開發(fā)查找原因說是debug模式部分地方?jīng)]有像release版那樣完全釋放內(nèi)存侈玄,我理解的意思是release釋放了婉刀,debug表面釋放但是實際并沒有釋放,所以造成我們release版出現(xiàn)問題而debug沒有該問題拗馒。
以下是從網(wǎng)上摘取的Debug和Release的區(qū)別:
Debug和Release僅僅是編譯選項的不同路星,那么為什么要區(qū)分Debug和Release版本呢溯街?
Debug和Release诱桂,主要是針對其面向的目標(biāo)不同的而進(jìn)行區(qū)分的。
Debug通常稱為調(diào)試版本呈昔,通過一系列編譯選項的配合挥等,編譯的結(jié)果通常包含調(diào)試信息,而且不做任何優(yōu)化堤尾,以為開發(fā)人員提供強(qiáng)大的應(yīng)用程序調(diào)試能力肝劲。
而Release通常稱為發(fā)布版本,是為用戶使用的郭宝,一般客戶不允許在發(fā)布版本上進(jìn)行調(diào)試辞槐。所以不保存調(diào)試信息,同時粘室,它往往進(jìn)行了各種優(yōu)化榄檬,以期達(dá)到代碼最小和速度最優(yōu)。為用戶的使用提供便利衔统。
下面僅就默認(rèn)的Debug和Release版本的選項進(jìn)行比較鹿榜,詳細(xì)的編譯選項可以看MSDN的說明。
我們將默認(rèn)的Debug和Release的選項設(shè)置進(jìn)行比較锦爵,過濾掉相同設(shè)置舱殿,主要的不同如下:
問題:
1..如果用銀聯(lián)插件支付 無法回調(diào) 進(jìn)入webView如何讓用戶操作?