Latest 0.6.33
Homepage https://github.com/Kibaan/iOS-Kibaan
License Apache License 2.0
Platforms ios 10.0
Authors

Carthage compatible

KibaanはiOS、Androidアプリの開発を効率化するためのライブラリです。
主な機能としてiOS、Androidに同じ名前のクラスや関数を用意することで、iOSからAndroidへの機械的なコード変換による移植ができるようにしています。

AndroidはKotlinでの開発を想定しており、SwiftからKotlinへのコード変換は、以下のツールを用いてある程度機械的に行うことができます。

SwiftKotlin

CocoaPodsアップデート方法

  1. Kibaan.podspecに記載されたs.versionを更新する
  2. GitHubにPUSHする
  3. GitHubで1に記載したバージョンと同じバージョンのリリースを作成する
  4. CocoaPodsサーバーにKibaan.podspecをアップロードする
pod trunk push Kibaan.podspec

4を行うには事前にPodへのユーザー登録が必要になる。
同じユーザーで登録可能なのか不明。

pod trunk register [email protected] 'altonotes Inc.'

ガイドライン

テキスト表示

UILabelなどテキストを持つUIは、UILableなどの標準クラスを使用せず、代わりに以下のSmart系クラスを使用する。

  • SmartLabel
  • SmartButton
  • SmartTextField
  • SmartTextView

これらのクラスを使用すると、アプリ全体でフォントを共通して管理できる。
共通フォントはSmartContextのシングルトンに設定し、
外部フォントを追加する場合、info.plistのFonts provided by applicationにフォントファイル名を記載する必要があるので注意

画面遷移

画面遷移は基本的にScreenServiceクラスにて行う。

ルート画面の切り替え

ScreenService.instance.setRoot(SampleViewController.self)

サブ画面を上に乗せる

ScreenService.instance.addSubScreen(FontTestViewController.self)

サブ画面を上に乗せた場合は、遷移元画面のonLeaveForegroundが呼ばれる。
※裏が透けるオーバーレイ表示の場合はBaseViewController.addOverlayを使用する

サブ画面を閉じる

ScreenService.instance.removeSubScreen()

画面遷移時にデータを渡す

画面遷移時に遷移先のViewControllerに何らかのデータを渡す場合は、prepare引数を使用する。

画面表示

必ずBaseViewControllerを継承すること。

BaseViewControllerの使い方

画面がスクリーンに追加されたときに処理をしたい場合はonAddedToScreenをoverrideする。

func onAddedToScreen() {
    super.onAddedToScreen()
    // 画面がスクリーンに追加された時に実施する処理
}

画面がフォアグラウンド状態になったときに処理をしたい場合はonEnterForgroundをoverrideする。
onAddedToScreenとは異なり、オーバーレイの画面を取り除いて戻った際にも呼ばれる点に注意。

override func onEnterForeground() {
    super. onEnterForeground()
    // 画面がフォアグラウンド状態になったときに実施する処理
}    

画面がスクリーンから取り除かれたときに処理をしたい場合はonRemovedFromScreenをoverrideする。

override func onRemovedFromScreen() {
    super.onRemovedFromScreen()
    // 画面がスクリーンから取り除かれたときに実施する処理
}

画面がフォアグラウンド状態から離脱したときに処理をしたい場合はonLeaveForegroundをoverrideする。
onRemovedFromScreenとは異なり、オーバーレイで画面を乗せた場合も呼ばれる点が異なる。

override func onLeaveForeground() {
    super. onLeaveForeground()
    // 画面がフォアグラウンド状態から離脱したときに実施する処理
}

オーバーレイ表示の方法

ダイアログなど裏の画面が透けて見えるUIをオーバーレイ表示する場合は、BaseViewControllerのaddOverlayを使用する。
オーバーレイ表示はScreenService.addSubScreenと異なり、親画面のonLeaveForegroundが呼ばれない。
もし、裏の画面が完全に見えなくなり、フルスクリーンで画面を表示する場合はScreenService.addSubScreenを使用する

addOverlay(◯◯◯◯ViewController.self)

画面のキャッシュについて

ScreenServiceを使用して画面表示をした場合は、標準ではViewControllerがクラス毎に1つキャッシュされる。
同じViewControllerクラスのインスタンスを複数作りたい場合は、addSubscreenなどの引数にidを指定する。

タブ区切りなど1つの画面で複数の子画面を持たせる

commonInit()をoverrideした上で、以下のようにコントローラを登録する。

override func commonInit() {
    super.commonInit()
    addSubControllers(Array(controllerMap.values))
}

or

override func commonInit() {
    super.commonInit()
    addSubController(sampleViewController1)
    addSubController(sampleViewController2)
}

また、foregroundSubControllersをoverrideし、現在表示しているビューコントローラの配列を返す必要がある。
※これを忘れると子画面のonStart()が呼ばれない為、注意が必要

override var foregroundSubControllers: [BaseViewController] {
    return [currentController]
}

SmartTableView

SmartTableViewはregisterCellClassで事前にCellのクラスを登録し、tableView(tableView:cellForRowAt)にて、registeredCellで登録したCellを取得する。
登録するCellクラスはUITableViewCellを継承し、クラスと同名のxibファイルを設けて、xibのViewのクラスをCellクラスに設定する必要がある。

    @IBOutlet weak var tableView: SmartTableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.delegate = self
        tableView.dataSource = self
        tableView.registerCellClass(SampleCell.self)
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let table = tableView as? SmartTableView else { return UITableViewCell() }

        let cell = table.registeredCell(indexPath, type: SampleCell.self)
        return cell
    }

端末に保存する設定

端末に保存する設定は機能に応じたLocalSettingのサブクラスで保存する。
アプリ再起動後も利用する必要がある情報のみ保存し、アプリ起動中しか必要のない情報は保存しないよう注意する。

アラートの表示

アラートの表示にはAlertUtilsクラスを使用する。

メッセージの管理

アプリで表示するメッセージはLocalizable.stringsに記述し、以下のような記述で参照する。

Localizable.strings

"msg_0001" = "ログインの有効期限が切れました。";

使用方法

"msg_0001".localizedString

Enumの定義

アプリ共通的に使用するコード値や種別はApp/Constant/EnumType直下にEnumクラスを追加する。
対応するコード値がある場合はrawValueに設定する。

サンプル

/// 売買タイプ
enum BuySell: String {
    case buy    = "3"   // 買
    case sell   = "1"   // 売
}

Extension

基本的なクラスの汎用的な機能はExtensionとして実装されています。
実装を開始する前にひと通り確認してください。

Latest podspec

{
    "name": "Kibaan",
    "version": "0.6.33",
    "summary": "Core classes for transplanting iOS app to Android app easily.",
    "homepage": "https://github.com/Kibaan/iOS-Kibaan",
    "license": {
        "type": "Apache License 2.0",
        "file": "LICENSE"
    },
    "authors": {
        "altonotes": "[email protected]"
    },
    "source": {
        "git": "https://github.com/Kibaan/iOS-Kibaan.git",
        "tag": "0.6.33"
    },
    "platforms": {
        "ios": "10.0"
    },
    "swift_version": "4.2",
    "source_files": "Kibaan/Kibaan/**/*.{swift,xib}"
}

Pin It on Pinterest

Share This