1. 程式人生 > >用 Xcode 編譯 Cocoapods 靜態庫

用 Xcode 編譯 Cocoapods 靜態庫

在開發中用 Cocoapods 託管開放給第三方的 SDK 框架是很方便的,但是在實際應用中卻發現,cocoapods 的 lint 檢驗過於嚴格,在建立 framework 時經常因為各種無法描述的問題導致 xcodebuild 編譯失敗或者校驗無法通過。

對於一些複雜專案而言(尤其是一些和其他語言混編的專案),要通過編寫 podspec 配置來成功編譯非常不易。甚至筆者遇到一個專案,無論如何修改 podspec 都無法通過 cocoapods lint,經過漫長的 google 後發現此問題基本無解,但用 Xcode 編譯沒有任何問題。因此先用 Xcode 編譯出 .framework 檔案,將 .framework 放到 pod 中,在上傳至遠端索引庫。

用 Xcode 編譯 framework

這個過程不再贅述。值得注意的是,framework 必須是 universal 的,因為 cocoapods 的 lint 非常嚴格,如果 framework 中缺少 slice 是無論如何也不能 lint 的(此問題基本無解,網上說的設定 s.xcconfig archs 或者 OTHER_LDFLAGS[arch=i386] 的方法不工作)。也就是說必須在真機下編譯一次,再在模擬器下編譯一次,然後將兩個編譯出來的 .a 檔案合併為一個 .a 檔案(用 lipo -create)。然後將 .framework 中的原檔案替換。

建立 pod 元件庫

建立 git 庫後,check out 到本地,將 .framework 放到專案目錄,然後 push。唯一需要注意的是 push 之後別忘了為元件庫打上 tag。

建立 podspec

pod spec create <xxxframework>

這裡的 是你的 pod 庫名稱。

然後編寫 podspec(假設庫名為 YLYIndoorNavigation):

Pod::Spec.new do |s|

  s.name         = "YLYIndoorNavigation"
  s.version      = "0.0.1"        
  s.summary      = "元力雲室內定位 SDK"

  s.description  = "廣州元力雲網絡 - 室內定位 SDK"

  s.homepage     = "https://gitee.com/kmyhy/YLYIndoorNavigationSDK"

  s.license      = { :type => "MIT", :file => "LICENSE" }

  s.authors             = { "kmyhy" => "
[email protected]
" } s.source = { :git => 'https://gitee.com/kmyhy/YLYIndoorNavigationSDK.git', :tag =>s.version } s.platform = :ios, '9.0' s.vendored_frameworks = 'YLYIndoorNavigation.framework' s.frameworks = 'UIKit','Foundation' s.libraries = 'stdc++' s.dependency 'CocoaAsyncSocket' s.dependency 'Protobuf' s.dependency 'MSWeakTimer' s.dependency 'AFNetworking' s.dependency 'FDFullscreenPopGesture', '~> 1.1' end
  1. s.version 即 tag 版本號。
  2. s.verdored_frameworks 指定了這個 pod 庫中包含的第三方 framework,也就是我們用 xcode 編譯出來的那個 framework,如果還用到其它 framwork,可以繼續新增到這裡,用逗號分隔。
  3. s.libraries 是這個庫依賴的系統 .a 庫。比如 libstdc++.tbd,如果 c++ 混編程式碼,缺少這個會報一個 ___gxx_personality_v0 錯誤。
  4. s.dependency,依賴的 pod 庫。
  5. 這個庫除了 .framework 檔案之外,沒有任何原始檔,不用指定 s. source_files。

上傳 pod

如果沒註冊,先註冊:

pod trunk register [email protected] “xxx”

注:郵箱和名字必須和 .podspec 中的一致。註冊成功後去郵箱點連結。

然後 pod trunk push 上傳 Pod。

上傳完成後,先 pod setup 更新一下本地索引檔案,然後再 pod search,即可看到上傳的 pod。

如果還是搜尋不到,刪除~/Library/Caches/CocoaPods目錄下的search_index.json檔案。