![](/img/trans.png)
[英]Turning an iOS framework into Cocoapod - do I need a new repo? Does it have to build a static library?
[英]Do I really need to create an iOS static library for internal-use-only code?
即使您不想與其他開發人員共享代碼,您仍然可以通過創建靜態庫獲得巨大的好處。
正如Srikar Appal所提到的,創建靜態庫所獲得的好處包括: 1)代碼分發 , 2)代碼重用 ,我還想補充一下, 3)版本控制 , 4)可測試性 (對BergQuester下面的評論的贊譽)和5 )文件 。
讓我們更仔細地看看這些:
靜態庫很棒,因為它們可以很容易地分發代碼 - 您只需要編譯並共享生成的.a
文件。
即使您從未計划與其他開發人員共享代碼,您仍然可以在自己的項目中使用它。
或者,您可以將靜態庫的項目作為子項目包含在各個主項目中,使其成為主項目的依賴項...請參閱https://github.com/jverkoey/iOS-Framework以了解如何設置。
即使在非常不同的應用程序中,您也經常會發現您正在執行與之前編寫代碼相同的任務。 如果你是一個高效的開發人員,你不會想再次編寫相同的代碼......相反,你只想包含你之前編寫的優秀代碼。
你可能會說, But I can just include the classes directly
。
但是,如果您的代碼不一定polished
,該怎么辦? 或者隨着時間的推移, 它使用的框架會隨着時間而改變?
當您對代碼集進行更改和錯誤修復時,能夠輕松地在項目中包含最新版本(或者稍后可以輕松更新項目)會很不錯。 靜態庫使這更容易,因為所有相關代碼都包含在單個包中。
也不用擔心其他開發人員對其進行的其他項目特定攻擊 - 主項目不能(或者在作為子項目的靜態庫的情況下, 不應該 )更改靜態庫的代碼集。
這樣做的另一個好處是,如果有人確實需要更改靜態庫的代碼集,他必須進行更改,以便所有依賴它的項目仍然可以使用它(沒有項目特定的快捷方式)。
如果您有一組可以移動的類並將項目包含在項目中,那么很難跟上版本控制。 最有可能的是,您所擁有的唯一版本是主項目的版本。
如果一個項目修復了一些錯誤而另一個項目修復了這個類集中的其他錯誤怎么辦? 您可能不知道合並這些更改(如果兩個團隊甚至分開工作會怎樣)? 或者,每個項目可能正在修復相同的錯誤!
通過創建靜態庫,您可以跟蹤版本控制(靜態庫的項目有自己的版本號),通過對靜態庫進行更改,您可以減少合並問題並消除修復相同錯誤的風險並結束。
隨着iOS作為平台的不斷成熟,對代碼進行單元測試變得越來越普遍。 Apple甚至繼續構建和擴展測試框架(XCTest),以使iOS開發人員更容易 , 更快地編寫單元測試。
雖然您可以 (以及恕我直言, 應該 )在應用程序級別為您的代碼編寫單元測試,但使用靜態庫創建和封裝代碼通常會使這些測試更好 , 更易於維護 。
測試更好,因為精心設計的靜態庫封裝了有目的的功能(即設計良好的庫執行特定的任務,例如網絡任務),這使得更容易“單元化”測試代碼。
也就是說,設計良好的靜態庫開始實現預定義的“目的”,因此基本上,它自然地創建測試邊界(即,網絡和呈現所獲取的數據可能至少是兩個單獨的庫)。
測試更容易維護,因為它們將與靜態庫代碼位於同一個存儲庫(例如Git repo)中(從而與此代碼一起進行版本化和更新)。 就像您不想將代碼從項目復制並粘貼到項目中一樣,您也同樣不希望復制和粘貼測試。
與單元測試一樣,在線文檔在iOS中繼續變得更加重要。
雖然你可以 (並且再次,恕我直言, 應該 )在應用程序級別記錄代碼,但如果它在靜態庫級別(與上面的單元測試相同的推理),它再次更好 , 更容易維護 。
我真的需要創建一個靜態庫,還是應該只為內部使用代碼創建一個類?
你可能會問自己以下幾點:
如果您對上述大部分內容回答YES
,則應該為此代碼創建一個靜態庫。 從長遠來看,它可能會為您省去麻煩。
如果對上述大部分內容回答“ NO
”,則可能無法從創建靜態庫中獲得太多好處(因為代碼集必須非常特定於此類實例中的項目)。
在我看來,創建一個靜態庫有以下好處 -
.m
文件)中的類,在頭文件中使用方法定義並導入頭文件( .h
文件),可以實現代碼重用。 因此,這不是創建靜態庫的理由。 由於靜態鏈接代碼,我不知道任何性能優勢。 創建靜態庫也有自己的維護開銷。 它不會像創建一個構建那么簡單。 你必須記住鏈接靜態庫,保持兼容性等。
因此,在您的情況下,創建靜態庫可能沒有多大意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.