---
# System prepended metadata

title: SwiftMinions 專案規範

---

# SwiftMinions 專案規範


* ## 規範
 
    * 透過 SwiftLint，細節再討論
    * 最低版本 Swift 5
    * 最低支援 iOS 11
    *  駝峰
    *  不要簡寫
    *  UIKit with type, ex: xxLabel, xxButton
    *  Function No ing, ed （not infect raw data
    *  (function) Caasting use keyword `to`, Ex: toDouble, toJson, toInt.
    *  (Variable) Caasting, Ex: doubleValue, jsonValue, intValue.
    *  Convenience way to get property using comupting property` 
    *  Indention = 4 spaces 
    *  Markdown 用中文 ( 繁中 ) 
    *  註解統一使用 header 2 的樣子
    *  Function 要長成下面這樣
    

```swift
    func xxx() {  // Has white space 
        /// code
    }
```

* ## 註解

註解是之後為了要給 [Jazzy](https://github.com/realm/jazzy) 使用得

* #### Require 
    * 使用 /** */ 的格式 
    * English description
    * Chinese description
    * Usage example

例子🌰
* 單一參數
```
    /**
     <#English#>
    
     ## Chinese description
     <#Chinese#>
    
     ## Use example
     ```swift
        
     ```
    
     - Parameter <#parameter#>: <#parameter description#>
     - Returns: <#return description#>
    */
```
* 多參數
```
    /**
     <#English#>

     ## Chinese description
     <#Chinese#>

     ## Use example
     ```swift
    
     ```

     - Parameters:
        - <#parameter1#>: <#parameter1 description#>
        - <#parameter2#>: <#parameter2 description#>
     - Returns: <#return description#>
    */
```


### Optional

想成為 jazzy 大師可以看 [HeaderDoc](https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/HeaderDoc/tags/tags.html) XD


* ## Architecture
    * 使用 Git, 開發階段先使用個人名字為主，避免衝突 Stephen, Hank .... etc.
    * 檔案名稱 XXXExtensions

* ## Folders
    * 仿造 SwifterSwift 分類，UIKit, UIFoundation... etc.
    * 開發階段分別創自己名字的 Folder 以及 swift 檔案，比如 UILabelExtensions_Stephen，避免檔案衝突。
    
* ## 整合
    * 一個禮拜一次的整合，會從 Dispatch Table 去挑選
    每人 20 題上限，共同 review ，確認無誤會轉移到正式的目錄底下

* ## 拍板定案
    * 不使用 fatalError
    * 不使用 !
    * 開放客製化部分 MinionsConfig
    * 站時不支援 macos 所以 #if canImport(UIKit) 之類的不用寫
    * completion 要回傳
    * Foundation, SwiftStandLibrary 是 default 載入的 Library
    * Comment 使用 cf. 或者 ref. 的時機

* ## 待討論
    * 常用的 uiscreen width height 這些東西是否要寫成一個 class 之類的？
    * function parameters 是否要給默認值
    * 啊什麼時候合併到 master 
    
    
* ## 開發流程

    * 本地先開自己的分支，要 push 前先檢查跟 dev 看看有沒有衝突，然後上傳，然後 merge request，通過 3 人 approve 就會合併到 dev

* ## Design umbrella framework 
    * 先不要，之後再考慮 

* ## Ci 
    * 當所屬 code 被合併的擁有者，自補測試
    * 使用 Travis

* ## Add-on 
    * Jazzy
    * Examples
    * Codedev
    * Version ( 跟 swift version 共進退 )
     

* ## Commit Template
    * [ Update ]：
    * [ Bug ]：
    * [ Remove ] ：
    * [ Refactor ]：
    * [ Add ]：

* ## Git comment
    * commit comment 英文
    * review 中英不限

* ## 2020/03/13 聚會

    * extension 需要使用 public 
    * pod spec folder dependency

    * ohlulu 開發自動上架腳本
    * 阿蘇 開發 hook 到 slack 
    * git 流程需要先 pull 到 自己分支在 push 在 Mr
    * 開發過程可以在 example 上面先試看看，但記得不用 push 上去
    


