サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大そうじへの備え
rizumita.medium.com
プログラミングにおいてロギングはデバッグなどに欠かせません。Dartにおいても同様です。ではDartでのロギングはどのように行うのでしょうか。 基本のprint()最も基本となるのがprint()でのログ出力です。 print('log by print');標準出力に flutter: log by printと出力されます。この出力はAndroid StudioなどのIDEのコンソールでも確認できます。 直接標準出力に出力するには以下のように行います。 stdout.writeln('log by stdout'); // 標準出力 stderr.writeln('log by stderr'); // 標準エラー出力これらは log by stdout log by stderrがそれぞれ標準出力と標準エラー出力に出力されるのですが、IDEのコンソールでは確認できませんでした。一方、
前回の記事ではMVVMとElmアーキテクチャとの比較記事を元になぜMVVMがdisられるかを検討し、MVVMとそのViewModelはどのような役割なのかを述べた。この記事では私自身がMVVMとReduxなどの関数型アーキテクチャパターンの源流となったElmアーキテクチャを比較しMVVMにおけるViewModelのより良い実装を探っていく。さらにアーキテクチャパターンの選定についても述べようと思う。 一つ謝らなければならない。次回はADRの記事と予告したが、まだ用意できていない。約束守れずごめんなさい! ElmアーキテクチャとはElmアーキテクチャはElm言語で開発されたアーキテクチャパターンで、Model-View-Update(MVU)というパターンで構成される。 以下のページで詳しく解説されているので見て頂くと良いと思う。 図解 The Elm Architecture の流れ モデ
iOSアプリではMVVMが多用されている。UIKitとFRPライブラリであるRxSwiftを組み合わせて実装されるのが一般的である。(私はReactiveSwiftの方が好きだけど…) MVVMはマイクロソフトのWPFで考案されたソフトウェアアーキテクチャパターンで、それがiOSに導入されて広まった。 しかししばしばiOSにおけるMVVMは批判の的となってきた。もっとも俎上に上がるのはVMの肥大化・複雑化である。最近では以下の記事があげられる。 なぜ MVVM は Elm Architecture に勝てないのか この記事を元になぜMVVMが批判されるのかを見ていこうと思う。 ViewModelは複雑化する論上記記事ではやはり「複雑化しすぎたViewModel」と主張している。 複雑化したコードが掲載されているので全文は転載しないが、主要な個所を見てみる。 まずViewModelの状態の管
6月23日に安曇野市穂高交流学習センターみらいで「安曇野プログラマーズクラブ第1回もくもく会」を開催しました。 私が企画したもくもく会です。企画理由は家の近所にもくもく会が無いのと、安曇野とその周辺のプログラマーと知り合いたかったかです。 4月24日にconnpassで募集開始して定員12人のところ13人の応募があり、最終的には残念ながら都合がつかなくなった方もありましたが総勢10人での開催となりました。 当初は四、五人で開催できればいいかと思っていたのですが、Twitterや安曇野市広報、松本経済新聞で告知したところ、予想を超えた反応がありました。 参加者は iOSアプリ系SIer系ハード系インフラ系DB系営業系などなど職業プログラマの方だけでなく多彩な方々が参加してくださいました。 安曇野市の方が多かったのですが、朝日村や白馬村から参加してくださった方もいました。 各自様々なことを行い
2〜3年前くらいでしょうか、iOSアプリ開発業界でMVVMが流行りだしました。しかし最近ではMVVMは賛否両論あります。私は2013年にMVVMをiOSアプリで使いはじめてさまざまな落とし穴にはまってきましたので、その経験や見聞きしたことからMVVMについて述べてみたいと思います。 落とし穴 1. ViewModelがメインだと思ってしまうMVVMに特有なのはViewModelです。ですので自然とViewModelに目が行きがちです。ViewModelは以下の役割を持っています。 ViewとModelの情報の伝達状態の保持ViewModelは主役となるViewとModelの橋渡し役なのです。 しかしViewModelを作ればいいんだと思ってしまうと大きな間違いを犯しやすくなります。ViewModelに何でもかんでも詰め込んで、ViewModelが責務過多になってしまうのです。いくつか間違う
きしかわせんせいからfor inとmapなどを比べてみるというリクエストをいただいたので、早速やってみたいと思います。 ちなみにきしかわせんせい曰くSwift2や3ではfor inの方が速かったそうです。 今回の環境はSwift version 4.0.3とiPhone Xの組み合わせです。 for inとmapを比べてみます。 コードは以下のようになっています。testメソッドのクロージャ引数内の実行時間を出力します。Rangeから配列へ射影しますが、そのままコピーしているだけです。できるだけ簡素な実装にしています。 まずは-Ononeで最適化無しです。 Execution time - for in: 0.084015965461731 Execution time - map: 2.84733605384827for inが圧倒的です。 次に-O -whole-module-opti
というつぶやきを拝見しました。Optionalに値が入っている場合の分岐の速度ということですね。もう少し詳細に調べてみました。 以下のコードを実機iPhoneで動かしてみます。 debug設定、つまり-OnoneでコンパイルしてrunSpeedTestsを実行すると Execution time - Optional Binding: 0.802894949913025 Execution time - eq not nil: 8.99928903579712 Execution time - switch: 0.802114963531494このような結果になりました。nilとの比較ではOptional Bindingよりも10倍以上の時間がかかっています。Swiftは!=は内部でswitchで検査しているようです。しかしswitchは最も速いです(何度実行してもほぼ最速)。となると!=
以前「CarthageでStatic FrameworkとしてビルドしてiOSアプリの起動時間を短縮する」という記事を公開しました。今回はその手法を利用してアプリのXcodeプロジェクト内に同居するDynamic FrameworkをStatic Frameworkとしてビルドしてみようと思います。 Dynamic FrameworkをなぜStatic Frameworkとしてビルドしたいのでしょうか。アプリを複数のDynamic Frameworkに分割したいけれどアプリの起動時間が増加するため躊躇われます。それをStatic Frameworkにして起動時間を気にせず分割できるようにしたいのです。 下準備としてまずXcodeで今回のサンプルプロジェクトを作成します。iOSのSingle View Appを作成します。 次にDynamic Frameworkを作成します。iOSのCoco
Carthageを利用してダイナミックフレームワークを追加していくといつの間にかiOSアプリの起動に時間がかかるようになっていきます。Appleは多くとも6つのダイナミックフレームワークにすることを推奨しています。しかしどうしても多くなって起動時間が遅くなってきます。この長くなった起動時間を短縮します。 起動時間の計測まずは実際にどのくらい時間がかかるかを計測してみましょう。 以下のCartfileをコマンドでcarthage update — platform ios — no-use-binariesでビルドしました。 github "ReactiveCocoa/ReactiveSwift" ~> 2.0 github "ReactiveCocoa/ReactiveCocoa" ~> 6.0 github "realm/realm-cocoa" github "ishkawa/APIK
私が担当しているiOSアプリをXcodeでビルドすると、CarthageやCocoaPodsであわせて50近くフレームワークを利用しているためフレームワークをコピーするRun Scriptフェーズで時間がかかっていました。計測したところコンパイルが必要なくても49秒かかっていました。 そのRun Scriptフェーズを実行しないようにして、ビルド時間が35秒短縮されました。それらのRun Scriptフェーズは一度実行すればDerivedDataを削除したりフレームワークを追加・削除したりしない限り実行する必要はありません。ですのでそのフェーズを実行しないように設定することでビルド時間を短縮することが出来ました。(CocoaPods1.2.0ではCode Signingをパラレルに実行できるようになるようなので、効果は小さくなると思いますが) 具体的にはRun ScriptフェーズのRun
私が試したことのあるiOSアプリでのソフトウェアアーキテクチャパターンとそれに関わるフレームワークの考察です。実際に使ってみて考えたことや感じたことを元に書いていきます。 基本のMVCコントローラが肥大化することやモデルレイヤーの設計が明確でないなどの問題があるといわれています。しかし、比較的小さいプロジェクトではたいてい肥大化の心配もモデルレイヤーの詳細な設計も必要ないのでMVCを選択すると良いと思います。 MVVMMVVMはビューとモデルを繋ぐビューモデルが重要な役割を果たします。問題は、画面遷移やモデルレイヤーの設計が示されていないことです。極端な例ですが、ビューモデルにAPIアクセスのコードを書いてしまい、ビューモデルが肥大化して問題になったという話を聞いたことがあります。MVVMを採用するほどのアプリになると画面遷移やモデルレイヤーの実装方法を規定すると良いのですが、MVC同様に
このページを最初にブックマークしてみませんか?
『rizumita.medium.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く