我的目標是創建一個包含Swift和Objective-C的iOS框架,我可以在我的開發項目中使用它。這個框架的本質是框架本身正在發展。所以,每次我使用這個框架構建項目(我將使用框架「使用」項目缺乏更好的術語來調用項目)時,重要的是我想確保框架本身被重新構建。我希望這是一個框架,因爲我有幾個使用應用程序,我希望使用相同的框架代碼。我一直在努力爭取今天的一大堆好處,並且浪費了大量的時間在本應該是的,至少在我看來,更容易。所以,我會分享我的過程。如何在包含Swift的iOS中創建開發框架?
回答
第一件要注意的事(這當然不是我第一次觀察!)是你不能這樣做使用iOS下的靜態庫。 Xcode不會讓你在靜態框架中使用Swift試試吧。 Xcode會否認你的願望!
下面是我結束的過程。我必須處理的兩個主要問題是:(i)使Xcode鏈接到使用項目中的框架而沒有錯誤,並且(ii)在使用項目中訪問框架的標題。在蘋果的啓發下,這兩個問題是分開的。注意諷刺。 )。
1)使用Xcode創建一個Cocoa Touch Framework
。我相信這適用於Xcode6和Xcode7。用途:
文件>新建>項目>的iOS>框架&庫>可可觸摸 框架
我碰巧使用Xcode7。 (做不是做一個Cocoa Touch Static Library
- 就像我上面說的,Xcode不會讓你將Swift合併到靜態庫中)。
2)用你的Swift類,確保成員和功能是public。我還沒有嘗試過這一點,但似乎公共屬性是成員和功能對框架用戶可見的必要條件。
3)將你想要的Swift類(和Objective-C)添加到你的框架中。
4)關閉該框架項目。 (同一個項目無法在Xcode中打開兩次,下一步您需要將框架合併到您使用的項目中)。
5)在Xcode中打開你使用的項目。對我來說這是一個現有的通用應用程序項目。您可能正在創建一個新的使用項目。無論如何,將Finder中的框架項目的.xcodeproj文件拖放到您使用的項目中。
6)在您使用的項目中,打開您的框架項目。然後在構建階段將框架文件拖入Embed Frameworks
(當我第一次開始我的實驗時,Embed Frameworks
部分未出現在構建階段,我不知道是什麼魔法導致它出現!)。
這些措施到目前爲止應該使您能夠構建和鏈接,而無需實際尚未整合你的庫代碼的使用。 (我在使用https://github.com/RadiusNetworks/swift-framework-example進行一些測試)。
7)現在對於coup de de grace:在Build Settings
下,搜索Framework Search Paths
。並添加:
${TARGET_BUILD_DIR}/YourFrameworkName.framework
(看來你不必須有這個標記爲遞歸)。
8)在您的銀行代碼文件中使用的框架,你需要在每個文件的頂部添加導入:
import YourFrameworkName
您現在應該使用新的庫能夠構建和鏈接!
9)還有一個問題:確保您的框架的Deployment Target
與您的目標項目匹配。例如,如果您的使用項目是爲iOS7構建的,請確保您的框架適用於iOS7或更早版本。我剛剛得知我的框架有必要將「App-Swift.h」(我爲此使用的名稱)作爲Objective-C生成的接口標題名稱在Build Settings中。當我將這個(Objective-C生成的接口頭文件)取出(試圖解決另一個問題)時,我得到了App-Swift.h中出現的一些有趣的問題。這些問題如下所示: "Cannot find interface declaration for NSObject"?
11)第三個問題(10/29/15):當我嘗試將第一個應用程序上傳到使用此框架的iTunes Connect時,出現上傳錯誤。錯誤閱讀:
ERROR ITMS-90206: 「無效的捆綁在 'Your.app/Frameworks/YourFramework.framework' 套裝中包含不允許的文件 '框架'。」
各種SO和其他帖子都遇到了這種錯誤,對於我來說,對於Framework目標來說,在Build Settings中將「Embedded Content Contains Swift Code」設置爲NO。 (我的應用程序生成設置已將此標誌設置爲否)。
與大多數的這些步驟完成一個例子項目是https://github.com/crspybits/CocoaTouchFramework.git
- 1. 在包含控制器的IOS中創建框架
- 2. 使用swift創建iOS框架
- 3. 如何包含vDSP框架(iOS)?
- 4. 包裝XIB在Swift框架中分發?
- 5. 在iOS中開發和分發框架
- 6. 爲什麼測試框架包含在開發包中
- 7. 創建iOS框架
- 8. 如何顯示它包含在iOS框架中的圖像?
- 9. 在AppCode中創建Swift框架
- 10. 創建Swift框架(重訪)
- 11. 在IOS中創建框架的Bundle?
- 12. 如何在Zend框架中包含/ elemnts
- 13. 如何在eclipse中包含codeigniter框架
- 14. 如何在swift iOS中使用Objective C靜態框架swift cocoa框架
- 15. 如何打開框架中包含的View Controller作爲iOS的靜態庫?
- 16. 包含在框架框架中4
- 17. 如何包含SDWebImage框架
- 18. 在XCode 4.2中爲iOS創建框架
- 19. 如何創建Play框架2.0 debian包?
- 20. 將iOS框架包含到另一個框架中
- 21. 如何在Cocoa的App包中包含框架設置包?
- 22. 創建通用iOS框架
- 23. 創建通用iOS框架
- 24. 如何在不包含需要的框架的情況下構建框架?
- 25. 如何在robovm ios上包含第三個框架?
- 26. 如何在CGI.pm下包含框架集?
- 27. 什麼iOS框架包含CGImageRelease?
- 28. 在iOS中的動態框架中包含一個靜態庫
- 29. 如何在android中創建包含內容的角落框?
- 30. 如何在ios中手動創建框架?
是不是不安全給予框架,其他誰願意使用你的框架的總xocdeproject?它不會讓你的應用對所有人開放嗎? – Saty
「讓您的應用程序對所有人開放」是什麼意思?正如我所提到的,這篇文章是在我自己的開發項目中進行的。我一直沒有把我的框架分發給其他一些安全問題或封閉源代碼問題。 –
好吧然後它的好。謝謝王子... – Saty