LazyBlog

Set By Set

新增框架專案

開啟終端機並且移動到你想要創立框架的位置(這邊舉例桌面)

1
cd ~/Desktop

建立專案

1
pod lib create HelloMyFramwork

你將會碰到幾個問題

  • What platform do you want to use?? (你是為了什麼平台?)
    • [iOS / macOS]
  • What language do you want to use?? (你想要使用什麼語言?)
    • [Swift / ObjC]
  • Would you like to include a demo application with your library? (你是否想要在你的核心框架中給一個範例?)
    • [Yes / No]
  • Which testing frameworks will you use? (你想使用哪種測試框架來進行測試?)
    • [Quick / None]
  • Would you like to do view based testing?
    • [Yes / No]

開啟專案後刪除測試相關檔案

Pods

  • 明明已經沒有選擇測試相關選項但仍然有出現測試檔案

    • 原因未知
  • 刪除框架專案中的「測試」目標與資料夾

Example

  • 打開Example中的podfile
  • 刪除測試的Target (圈起來的通通拿掉)

  • 選擇Example專案並刪除測試Target

  • 刪除測試資料夾

  • 刪除Example中Pods資料夾底下與測試相關的檔案

  • 刪除Example中Frameworks資料夾底下的測試框架

好,終於刪除所有測試的檔案了可以去泡杯咖啡抽跟菸喘一下 (累.PNG)

編輯podspec

  • 修改框架支援OS版本
  • 新增指令框架使用Swift語言

關閉Xcode 並且 pod install

每次有新增Flle或者XIB檔案等等操作都需要pod insasll

1
pod install

文件介紹

_Pods.xcodeproj
這是cocoapods的專案檔,裡面包含自己定義的框架

podspec
你可以把它想像成「描述框架文件」主要說明作者、版本、使用許可、倉庫地址甚至是支援版本

Example
範例專案,這個就不用多解釋了

你建立的框架名稱資料夾
這個範例的名稱叫做「HelloMyCocoapods」

這裡面基本上會包含兩個資料夾

  • Assets
    • 用來放置圖片、XIB等等資源
  • Classes
    • 用來放置File

File

從專案左側的資料夾可以看見一個很顯眼的File名叫「ReplaceMe」

這個命名也挺有意思,就是請你取代他
點開該文件發會發現空白,沒有任何說明(也可能官網有放說明…我沒看)
這邊有幾個狀況要特別再三說明,這些狀況我覺得其實應該大多數的網路文章都沒有仔細說明這塊
以下是我個人的經驗總結

新增資料夾

檔案很多,總該要有資料夾來做為分類管理
後面加入的Resopurce如果也需要資料夾分類管理,方法一樣

  • 首先我們在我 Classes 底下建立兩個資料夾並命名為「Manager」與「Util」
  • 回到框架的專案內並建立兩個File

新增File

在Pods底下直接cmd+N來新建立兩個.swift
直接指定好File到剛剛建立的資料夾底下

確認文件位置

  1. 確認好.swift的檔案有儲存到正確的位置
  2. 如果資料夾內沒有任何.swift的文件,後續pod install後該資料夾不會在Xcode中顯示


  1. 終端機 cd 到 Example資料夾底下
    1
    pod install

Podspec說明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Pod::Spec.new do |s|

#---框架外部資訊相關---#

#框架名稱(required)
s.name = 'HelloMyCocoapods'
#框架版本,每次更新都得來這邊修改(required)
s.version = '0.1.0'
#簡介
s.summary = '沒有一堆幹話的精簡介紹'
#長介
s.description = <<-DESC
更詳細的介紹
DESC
#專案主頁面(required)
s.homepage = 'https://github.com/League2EB/HelloMyCocoapods'
#如果是UI相關框架,可以放擷圖來展示
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
#使用許可證(required)
s.license = { :type => 'MIT', :file => 'LICENSE' }
#維護人員資訊(required)
s.author = { 'Lazy' => 'Lazy@Lazy.com' }
#如果是多人維護
#spec.authors = { 'Lazy1' => 'Lazy1@Lazy1.com','Lazy2' => 'Lazy2@Lazy2.com' }


#---框架內部資源相關---#

#目標語言版本
s.swift_version = '5.0'
#框架位置(required)
s.source = { :git => 'https://github.com/League2EB/HelloMyCocoapods.git', :tag => s.version.to_s }
#框架部屬目標版本
s.ios.deployment_target = '10.0'
#框架文件目錄
s.source_files = 'HelloMyCocoapods/Classes/**/*'
#框架圖片資源目錄
s.resource_bundles = {
'HelloMyCocoapodsresource' => ['HelloMyCocoapods/Assets/**/*.{png,xib,xcassets}']
}
#依賴的第三方框架
s.dependency "RxSwift"
#依賴的系統框架
#s.frameworks = 'UIKit', 'MapKit'
end

依賴

如果自己開發的框架中有依賴另外一個第三方框架,可以在podspec中設定

1
2
3
s.dependency "RxSwift"
s.dependency "Moya"
s.dependency "ObjectMapper"

Resource

加入圖片資源檔案或者XIB
  • 首先,選擇框架專案檔案

  • 新增Target

  • 選擇macOS後 右邊輸入Bundle並選擇 Bundle

  • Product Name 千萬不要與框架名稱相同

  • 建議命名 框架名稱+Resource

    • 例如:HelloMyCocoapodsresource
  • 新增一個XIB作為測試,這邊命名為CocoaViewController

  • 打開HelloMyCocoapods.podspec

    • 解開註解並編輯

    • 替換Bundles的名字為剛才取的Product Name

    • 並且宣告將要讀取的資源檔案png,xib,xcassets

    • 附檔名的前後要加入一個波浪括號{}(很多Blog就死不講,害新手打錯找半天)

      1
      2
      3
      s.resource_bundles = {
      'HelloMyCocoapodsresource' => ['HelloMyCocoapods/Assets/*.{png,xib,xcassets}']
      }
  • 設定Base SDK

    • 選擇「框架」專案中的Build Settings

    • 項目Architectures裡頭的Base SDK改為「iOS」

Assets底下建立兩個資料夾

  • 一個叫XIB一個叫IMG(名字隨便你取這邊只是範例)

  • 點選你的框架底下的同名資料夾後 cmd + n

  • 新增一個XIB,並且命名為CocoapodsViewController
    • 新增時直接指定.xib放置的位置為剛剛建立的XIB資料夾
  • 新增一個Asset Catalog 建議使用預設的Media.xcassets
    • 新增時直接指定.xcassets放置的位置為剛剛建立的IMG資料夾

把這兩個檔案「各別」放置到剛剛建立的XIB、IMG資料夾去

關閉Xcode 再次pod install

1
pod install
  • 打開專案,應該要自動出現Resources這個資料夾,若有便是成功

新增圖片資源資料夾

  • 作法一樣但要特別注意名稱,不要命名與Example一樣為Images.xcassets

  • 建議使用預設的Media.xcassets
    - 原因除了Xcode會替我們優化圖片的載入速度之外還有避免被逆向工程之後導出圖片的可能
    ~

    如圖,圖片都被壓縮在Assets.car裡面了,可能是我逆向的能力不足但我自己本身拆解不開….

    • 載入速度確實會比較快,但我還是找到破解Assets.car的方法了….

結束

基本上執行到這裡就算是完成了,Example的專案理當也可以使用框架中有開放的類別或者Resource的資源了


 評論