# 如何自製 Swift package

[swift](https://lochiwei.gitbook.io/ios/swift) ⟩ [type](https://lochiwei.gitbook.io/ios/swift/type) ⟩ [custom](https://lochiwei.gitbook.io/ios/custom) ⟩ [package](https://lochiwei.gitbook.io/ios/custom/package) ⟩ how to make&#x20;

{% hint style="info" %}
1️⃣ Xcode 設定好 GitHub 帳號\
2️⃣ Xcode 開啟新的 Package 檔案\
3️⃣ 設定套件所支援的 Swift 語言最低版本 (⭐️ 重要)\
4️⃣ 編寫要分享的程式碼\
5️⃣ 發佈到 GitHub
{% endhint %}

{% tabs %}
{% tab title="👥 相關" %}

* :gift: [geometrykit](https://lochiwei.gitbook.io/ios/custom/package/geometrykit "mention")：支援向量、複數運算的套件。
  {% endtab %}

{% tab title="📗 參考" %}

* Git Tower ⟩ [What is Version Control?](https://www.git-tower.com/learn/git/ebook/en/command-line/basics/what-is-version-control#start) ⭐️  &#x20;
* ChatGPT ⟩ [如何使用自製 Swift Package](https://chatgpt.com/share/67597791-e480-800e-8eef-6cc9d004bb18) &#x20;
* microsoft ⟩ [What is Git?](https://learn.microsoft.com/en-us/devops/develop/git/what-is-git)
* 伊恩的開發狂想 ⟩ [程式碼版控](https://eandev.com/post/series/build-automated-deploy/version_control/)&#x20;
  {% endtab %}

{% tab title="📘 手冊" %}

* [Swift Playgrounds](https://developer.apple.com/documentation/swift-playgrounds) ⟩ [Adding a Swift package to your app playground](https://developer.apple.com/documentation/swift-playgrounds/add-a-swift-package)
  {% endtab %}
  {% endtabs %}

## 步驟

{% tabs %}
{% tab title="1️⃣" %}

* Xcode ⟩ Settings ⟩ <mark style="color:yellow;">Accounts</mark> (tab) ⟩ select <mark style="color:yellow;">GitHub</mark> and continue. \
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FKKT3ABC32sGWVzl9s489%2F%2BGitHub_account.png?alt=media\&token=428ccb53-9646-4e55-b79e-573d64cc0f7e)  <br>
* try to <mark style="color:yellow;">sign in GitHub</mark> (you may have to create a token on GitHub)\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2F7hnpgAQortaO5rQR2BLs%2Fsignin_github.png?alt=media\&token=11990daa-dbbe-44e6-a5ee-c8bbfb59dc14)<br>
* when successful, you'll see your GitHub account added.\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FEDJQMknT4P1okGCLIQQq%2Fgithub_account_added.png?alt=media\&token=cc4e2562-7c8f-4723-87cc-08f5a2c8577d)<br>
* go to next step.
  {% endtab %}

{% tab title="2️⃣" %}

* 選擇功能表 Xcode ⟩ <mark style="color:yellow;">File</mark> ⟩ <mark style="color:yellow;">New</mark> ⟩ <mark style="color:yellow;">Package</mark> ... ，然後選 "<mark style="color:yellow;">Library</mark>" 然後跳下頁：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FyXNN9pnfBDN2w8eZXcK7%2Fpackage_library.png?alt=media\&token=a2c9cd2f-d417-467a-a387-39fbe3bff23f)<br>
* "<mark style="color:yellow;">Testing System</mark>" (做 Unit Test 的系統) 選 [Swift Testing](https://lochiwei.gitbook.io/ios/appendix/testing-system/swift-testing) (預設)即可，不用改，跳下頁：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FsxSkxkWuXOYRXQ8xIspZ%2Ftesting_system.png?alt=media\&token=c2bfb8ef-fae8-48be-97c7-cc5b79cf604a)<br>
* 設定好 package 的<mark style="color:yellow;">名稱</mark>，選一個<mark style="color:yellow;">儲存檔案的位置</mark> (Xcode 會產生一個母資料夾，下面還有其他檔案與子資料夾)。如果以後要分享這個套件，建議 "<mark style="color:yellow;">Create Git repository on my Mac</mark>" 要打勾，以後透過 GitHub 的連結就可以匯入 [Swift Playgrounds](https://lochiwei.gitbook.io/ios/swift-playgrounds) 或其他專案中。\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FKggj4RiGPGUEjbTiiAZK%2Ffile_location.png?alt=media\&token=451e9143-3e84-43ef-afce-5842a3f84ff4)<br>
*

{% endtab %}

{% tab title="3️⃣" %}

* 新的 package 檔案開啟後，選擇 Package.swift 檔案，然後修改第一行的 swift-tools-version：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FjIfYwJQiJqFLTgNAUfnG%2Fswift_tools_version.png?alt=media\&token=1bdd7fb4-8ac6-46dc-afee-eaa7e1f82f55)\
  \
  將畫面中的 `// swift-tools-version:`` `~~<mark style="color:red;">`6.0`</mark>~~ 改為 `// swift-tools-version:`` `<mark style="color:yellow;">`5.7`</mark>。\
  \
  這一行雖然是個備註 (comment) 行，但非常重要，因為這裡設定的是這個套件「<mark style="color:yellow;">所支援的 Swift 語言的</mark><mark style="color:red;">最低版本</mark>」，因此如果設太高，將來要分享此套件到其他專案或 iPad 上的 Swift Playgrounds 時會出現問題，因為你的設備可能無法支援這麼新的 Swift 版本。\
  \
  以後 Swift 版本會再更新，所以這裡支援的 Swift 的版本，請到時候依狀況自行斟酌。<br>
* 到下一步驟。
  {% endtab %}

{% tab title="4️⃣" %}

* 再來，到 <mark style="color:yellow;">Sources</mark> 資料夾編寫程式碼，在這裏你可以<mark style="color:yellow;">新增資料夾</mark>、<mark style="color:yellow;">新增檔案</mark>，檔案結構可以自行決定：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FOKYHPvPN5e4CmLIACFI0%2Fadd_scource_files.png?alt=media\&token=f7bf3383-6791-45c1-a79a-5589ed9069d7)<br>
* 如果要加一些測試檔案 (Unit Test)，也可以到 <mark style="color:yellow;">Tests</mark> 資料夾編寫測試檔，編寫方式請參考 [Swift Testing](https://lochiwei.gitbook.io/ios/appendix/testing-system/swift-testing)：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2Fk6zHVeq5jLidDaaL2S6W%2Fswift_testing.png?alt=media\&token=31f490af-d0eb-4fca-ab2b-443a1a365e7e)<br>
*

{% endtab %}

{% tab title="5️⃣" %}

* 到 <mark style="color:yellow;">Source Control navigator</mark> 中選 <mark style="color:yellow;">Branches</mark> ⟩ <mark style="color:yellow;">main</mark>，然後按右鍵選 <mark style="color:yellow;">New</mark> "YourPackageName" <mark style="color:yellow;">remote ...</mark> ，並完成其中的設定，在 GitHub 上成功新建一個 remote repo：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2F6mjjq1jzJx3bMoxv4FTC%2Fnew_remote_repo.png?alt=media\&token=f16e184c-30a8-4873-8d3a-ed8a3838a8f1)<br>
* 等編寫好套件的所有程式碼，測試完畢沒有任何問題時，到 <mark style="color:yellow;">Source Control navigator</mark> 中選 <mark style="color:yellow;">Branches</mark> ⟩ <mark style="color:yellow;">main</mark>，按右鍵選 "<mark style="color:yellow;">Tag main ...</mark>"，然後輸入版本號 1.0.0。\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2F5jFKhaaZCf7wBGzn3A2x%2Ftag_version_number.png?alt=media\&token=8b9d2dd9-73cc-4eb9-905b-a2bb6ffd6ed6)<br>
* 再來到功能表選 "<mark style="color:yellow;">Integrate</mark> ⟩ <mark style="color:yellow;">Push</mark> ..." 將所有檔案上傳到 GitHub：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2Fi6t5GZkH5l6HjTd1AUaE%2Fgit_push.png?alt=media\&token=d8c19248-5e48-4136-a696-5d2a2e7ddea6)<br>
* 最後到 GitHub 的 Tags 頁面發布一個新的 Release 就可以使用了：\
  ![](https://1830103165-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M5-JmwCZMKh_d7RfBaN%2Fuploads%2FKejbB4fABrLdcNmMZVPr%2Fpackage_release.png?alt=media\&token=7c9ac34c-b2d6-45fe-bb88-a686bcec1409)
  {% endtab %}
  {% endtabs %}
