Kibaan的概要
Kibaan是一个用于提高iOS和Android应用程序开发效率的库。
它主要提供以下功能:
Swift与Kotlin的差异吸收
在Kibaan的使用中,编程语言iOS侧为Swift,Android侧为Kotlin。
Kibaan尽可能多地吸收了Swift和Kotlin之间的差异。
例如,Swift的String类可以通过count
属性获取字数,但在Kotlin中则通过length
属性获取字数。因此,Android侧的Kibaan提供了与iOS同名的方法String.count
,使得iOS和Android都可以通过同名属性获取字数。
从Swift到Kotlin的机械转换
通过使用SwiftKotlin,可以相对机械地将Swift代码转换为Kotlin。
因此,在使用Kibaan进行开发时,建议先进行iOS侧的实现,然后进行Android侧的开发。
屏幕控制
Kibaan提供了屏幕功能。
这是iOS中所使用的Segue
、UINavigationController
或presentViewController
等屏幕切换功能的替代者,使用Kibaan可以使iOS和Android都具有相同的屏幕切换处理代码。
此外,Kibaan为Android提供与UIViewController
类似的功能。这使得iOS和Android的屏幕和屏幕切换代码可以类似实现。
UI类
κιバーンはテキスト、ボタン、テーブルビュー、スクロールビューなど基本的なUIクラスを提供します。
これはiOS標準のUILabel、UIButton、UITableViewなどのクラスをラップするもので、OS標準の機能に角丸やパディングなど、よく使う一般的な機能を少し足したものになります。
これらのUIクラスはAndroid側にも同名のクラスが用意されており、これを使うことでUI周りのコードをiOSとAndroidで同様にすることができます。
共通のフォント管理
キバーンの提供するUIクラスは一律でフォントファミリーを変更することができます。
アプリケーション共通で通常フォントと太字フォントを指定すると、すべてのUIクラスに対してフォントを設定することができます。
ユーティリティー
他にも、キバーンはアプリ開発において基本的な以下のような機能を提供します。
- HTTP通信
- 端末内データベース(UserDefaults、SharedPreferences、Realmなどの代替機能)
- データのセキュアな保存
- アラートダイアログの表示
- クエリパラメータのパース
動作環境
- 最小サポートOS
- iOS10.0
プログラミングガイド
AppDelegate
AppDelegateは SmartAppDelegateを継承させなければなりません。
テキスト表示
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参数。
屏幕显示
如要用Kibaan的页面切换功能,ViewController需要继承SmartViewController
。
SmartViewController的用法
如果想在画面添加到屏幕时进行某些处理,请实现onAddedToScreen
。
func onAddedToScreen() {
super.onAddedToScreen()
// 画面がスクリーンに追加された時に実施する処理
}
如果想在画面成为前台时进行某些处理,请实现onEnterForground
。
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
下。
如果有相应的代码值,请设置到rawValue
中。
示例
/// 売買タイプ
enum BuySell: String {
case buy = "3" // 買
case sell = "1" // 売
}
扩展
基本类的一般功能是通过扩展实现的。
开始实现之前,请仔细检查。
CocoaPods更新方法
- 更新
Kibaan.podspec
中记录的s.version
。 - 向GitHub提交PUSH。
- 在GitHub中创建一个与第1步中提到的版本相同的版本发布。
- 将
Kibaan.podspec
上传到CocoaPods服务器。
pod trunk push Kibaan.podspec
要执行第4步,需要事先注册Pod的用户。
不清楚是否可以使用同一用户注册。
pod trunk register [email protected] 'altonotes Inc.'