サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大阪万博
qiita.com/yimajo
注意: この記事はv0.39.0以降に対応していません。 初回リリースから0.39.0まで、Effect型はCombine.Publisherプロトコルに準拠していましたが、0.39.0以降はSwift ConcurrencyによりReducerの仕組みが変更されているのでそこら辺をご考慮願います。 Swiftを用いたiOS/macOS/tvOS/watchOSアプリ開発用に The Composable Architecture(TCA)というのがあり、それがめっちゃ良いやん!と思ったのでそれを書いておきます。フレームワーク的に提供されていますが、特にSwiftUIを使ってどういう構成でアプリを作ろうかと考えている人がコードを読むだけでもとてもいい教材になると思います。 The Composable Archtectureを提案しているのは、関数型プログラミングとSwiftについての動画
この記事の目的 SwiftUIのSubViewはその親Viewを更新されるタイミングで繰り返し生成と破棄されます。画面を更新されるたびにstructであるSubViewは破棄されて作り変えられているわけです。これを数字で理解するのがこの記事の目的です。 SubViewは描画が必要なタイミングで生まれ変わっている、というのを言葉ではなく数字で分かりたいわけです。 (SubViewでない親Viewは繰り返し生成されなくても画面更新されます。これは例えばUIHostingController(rootView:)で指定したSwiftUI.Viewなどです) 具体的な前提 前提を説明すると、とあるContentViewが@ObservedObjectを持つ場合にその@Publishedなプロパティが更新された場合、ContentViewは更新のためにvar body: some View {} プ
SwiftUIでコードを書いていると、クロージャでViewのselfを頻繁に使うと思います。大抵のiOSアプリ開発者はselfを書かなければいけない場面にのみselfを利用しているので、循環参照しないようにweakもしくはunownedにすることを考慮したくなりますが、SwiftUIのViewはそこは考慮しないでも良いようです。この記事はその理由などを書いています。 なぜSwiftUIでselfが登場しても循環参照しないのか 本題です。SwiftUIでselfを頻繁に使う例として、Buttonのactionクロージャでselfを使う例を利用します。 画面としては次のようなボタンだけのContentViewを考えます。 import SwiftUI struct ContentView: View { var body: some View { Button(action: { /* [we
なぜこんな事を考えているかというと、iOS VIPERアーキテクチャ研究読本(仮)という電子書籍を作ってみたいなと考えていて、まずはサンプルコードを作ろうとしているためです。 VIPER研究読本用サンプルコードのリポジトリ https://github.com/yimajo/VIPERBook1Samples UseCaseとは? この記事でのUseCaseの前提として、 システムを水平レイヤに分割したときのビジネスロジックを実装するもの 単一の目的を持ったコンポーネント としてます。 この前提は、書籍「Clean Architecture 達人に学ぶソフトウェアの構造と設計」での"ユースケース"から参考にしました。 注文入力システムに注文を追加するユースケースは、注文を削除するユースケースと比べると、明らかに異なる頻度と理由で変更される。ユースケースはシステムを分割する自然な方法である。
はじめに RxSwiftでsubscribeをネストされると困るという話を最小限のコードで説明してみる。 例えば次のようなコードがあるとする、これはやってることはシンプルだがこのような書き方を普段しているようなら、処理が複雑になっていくにしたがって読みづらいコードになる。 textField.rx.text .subscribe(onNext: { text in GitHubRepo.search(from: text).subscribe(onNext: { result in ... }) .disposed(by: disposeBag) }) .disposed(by: disposeBag) このコードをもう少しシンプルに再現しやすいサンプルでネストしないようにしてみる。 シンプルなネストの例とその解決案 Swift.Sequenceな1, 2, 3を文字列と結合する例を考えて
この文章は、 「RxSwiftの仕組みを利用して、MVVMモデルを導入しよう - RxSwiftを使った一歩進んだiOSアプリ開発 第4回」に書かれている記事にある内容を、自分が説明記事を書くならこうやるなーというものを解説します。自分がアプリケーションを作るときにどうやるかではなくて、元記事も説明をするためにあえてやってることもあると感じるためです。 元記事ではWikipediaのWeb APIに対して文字列を送信し、その結果をtableViewに表示するというものです。 書き換えにあたってコンセプトとしては 無駄にSubject(というかVariable)を使わない Subjectは自由にイベントを発火できるためコードが圧倒的に読みづらくなるため 無意味なprotocolは作らない protocolを作るならそれを利用するコードを書く インターフェースを揃えるだけでは意味をもたない 「
春もたけなわで行楽の好季節となりました。@yimajo です。 2018.4.14にiOSアプリ開発をモブプログラミングをする会を開きまして、その報告を書いておこうと思っております。 上の写真は会場のSansan株式会社横にある国際連合大学前です。週末はファーマーズマーケットというのをやってました。 第1回 実践 iOS アプリ開発モブプログラミング会 https://mobproios.connpass.com/event/83871/ この文章は、第2回目を開催した際に、参加を迷う人がこの記事を読むことを想定しています。もしくはモブプログラミング会を開催してみたい人のために何かしら参考になるように心がけています。 モブプログラミング会の概要 iOSアプリとしてTodoアプリをMVP(Model View Presenter)パターンでつくる過程をモブプログラミングしようというのがやりた
macOSをHigh Sierraにアップデートしたら、cURLのバージョンが7.54.0になっており、さらにHTTP/2の利用ができるようになっていました。 iOS10からはAPNs Provider APIを利用したPUSH通知が受け取れていたため、pemファイルさえあればローカルのmacOSからiPhone実機へ向けたPUSH通知を送れます。 念のため、curlコマンドからnghttp2込みでビルドされているのを確認するのは-Vです。 $ curl -V curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0 Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps p
qiita.com
iOS で View 用に Entity を Struct に変換するってそれ Protocol で出来ることではないんでしょうか この資料は何か? iOS/Androidの勉強会での発表資料です 間違えもあるだろうという部分を修正していきたいので コメント欄にご意見貰えればそれを反映していきたいです 言いたいこと 3つ 要件的にStructに変換する必要があればもちろんやらざるを得ない ただ、Structに変換する際にRealm.ResultやPHFetchResultをループさせて取り出すのはコストが高いよね 単にImmutableにしたいならそれProtocolで出来ませんかね はなしの導入 他の勉強会で、10,000件のRealm.ObjectからStructに変換したら80秒かかったので短縮したとか、しなかったとか 自分の知っている永続化などのフレームワークについて そもそもRe
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
はじめに iOSアプリ開発のために、APIKit(もしくはインターフェースをAPIKitふうにしたもの)を利用していると、コードレビューの際に他人の使い方を見ることがあって、そういうときにAPIKitの使い方について人に指摘することがあったのでそれを書いておく。 Requestのイニシャライザに渡すのはValueObjectやEntityじゃないほうがいい APIKitのようなやり方の良さの一つとして、リクエストとレスポンスが何らかのWebAPIドキュメントと見比べたときに明確さがあるということだと思う。 それで大抵の場合、必要なパラメータをイニシャライザで渡すことになるけど、そのイニシャライザでは自作のValueObjectやEntityを渡すのではなく、StringやBool, NSNumberなんかのほうがいいですよという話。 (本記事のコメント欄から、自作のValueObjectや
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに アプリで大きなサイズの動画や画像をアップロードしようとする時、ユーザを待たせないためにアプリが動作していないときでもアップロードできるようにしたいという要望が必ず上がる。そういうとき、NSURLSessionによるBackground Transferを使ってアプリが動作していないときでもコンテンツをアップロードする方法について行き着くと思うが、何から調べたら良いのかということや、iOS4からあるバックグラウンド要求について、Background fetchなどと紛らわしいという事があったのでそれを整理しておく。結局、実装は出
こんにちは @yimajo です。この記事は今から新規でAndroidアプリを書き始めるなら。に大きく影響されています。主な内容として次のような事柄を取り扱っています。 今から書くならこんな設計 こんなライブラリがあるが使ってみた感想 ただ、結論として大して深い内容は書けませんでしたので、がっかりせず、みなさん思い思いにやればいいよっていうことに終着しています。アドベントカレンダーのネタにみなさんも書いてみてはどうでしょう。 言語について Objective-C か Swift か まず最初に言っておくとObjective-CやSwift以外にもiOSアプリを始める方法はあります。例えばObjective-C++とかRubyMotionとか。まあそれはそれで良いところもあると思いますが、複数人でiOSアプリ開発を行いそれを保守したり機能追加したりすることを考えるとObjective-CかS
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? こんにちは @yimajo です。 この記事ではiOSにインストールされているApple製のアプリのUIについて考察し、アプリ開発の参考とすることを目的としています。AppleのiOS ヒューマンインターフェースガイドラインをたびたび引用するので、省略してApple HIGと呼称します。 前提 Apple HIGに準拠している内容についてはリンクしていますが、基本的にはApple製アプリの共通点からHIGに書かれていないUIの一貫性を元に考察しています。もし違ったパターンがある場合は(できればスクリーンショット付きで)コメントをいただけ
このスライドは WWDC16. Meetup@Wantedly with 日本経済新聞社 http://wantedly.connpass.com/event/33967/ @yimajo 発表資料です おやくそく Apple社とのNDAには最新の注意を払って誤解のないようにしたい ここに集まっている人たちは皆AppleとのNDAを結んでいて私の話すことは既知の情報です ただしスライドの写真を撮ってtweetするのはNDA警察に余計な心配をされるかもしれないので我慢しましょう Apple Developer Agreement 祝: iOS10でSiriを開発者が自由に使えるようになった!! ヽ(´∀`)八(´∀`)ノイエーイ 勘違い乙 Siriがあたかも自由に扱えるようになったような メディアの報道だけだと勘違いしたままになるので整理します まず概要から言うよ 1. Siri画面上からチ
色々なサイトの方法を読んだけど自分の言葉で説明するほうがしっくりくる。 前提としてはPostgreSQLはDockerHub公式リポジトリのpostgresを使っている。 PostgreSQLコンテナのデータを永続化するだけの最もシンプルなパターン とにかく永続化したいときホスト側にデータを保存する。 DockerHub公式リポジトリのpostgresのPostgreSQLデータ領域は/var/lib/postgresql/dataなので、このデータ領域をホスト側から共有できればPostgreSQLのコンテナを消してもデータは残る。 docker runの-vでホスト側のパスを指定し、コンテナのデータ領域を指定する。 $ ls -la ~/docker/postgres 合計 124 drwx------ 18 999 root 4096 7月 27 14:39 2015 . drwxr-
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? iOS/Androidアプリ開発のTipsを共有する勉強会potatotips第26回がSupership社で開催され、Androidブログまとめ枠に参加させていただきましたので、不肖@yimajoまとめました!!!!資料は都度、アップロードしてもらえれば追記します!! Supership社はアンサーなどのiOS/Androidアプリがあるサービスを運営している会社さんです。 KotlinでAndroidアプリ作ってみた @rei_m HBFabのKotlin版を作ってみた Kotlin良かったよ varとval(ミュータブルとイミュー
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? AndroidでKotlin勉強会@Sansan株式会社に参加しました。基調講演としてロシアのJetBrains社でKotlinの開発チームに在籍している@yanex_ruさんが、日本語でKotlinについて話されていました。 下記は自分のメモですが、もし訂正したいなどあれば編集リクエストをください(最後になるに従って内容が減ってるのは集中力がなくなったからです)。 基調講演 JetBrainsの@yanex_ruさん JetBrainsはロシアの会社って知ってますか? 数年前山崎まさよしに興味を持ったのがきっかけで日本語を勉強しました
Swiftでコードを書く際、任意のクラスをdelegateとしてweakにしたい場合は、classプロトコルを採用するコードを書かなければ ‘weak’ cannot be applied to non-class type というコンパイルエラーとなる。 (言い換えると、classプロトコルに準拠したクラスはweakにできるようになりdelegateとして扱える) 例がこれ protocol SomeProtocolOne { func run() -> Void } protocol SomeProtocolTwo : class { func run() -> Void } class SomeView { weak var delegate: SomeProtocolOne? // これはコンパイルエラー ‘weak’ cannot be applied to non-class
ネット媒体に載せるインタビュー記事で気をつけるところをパターン化し、それの対応策っぽいものをまとめた まえがきが長い だらだらと一般的なことを持論のように述べられても読みたくない 例:「ネットが当たり前の昨今、これからの開発者というものは...」 どうしても書きたいなら最後に書けばいい インタビュー対象の成果が分かりづらい 具体的なアウトプットを示さないと興味もわかない 例:「リーン・スタートアップやグロース・ハックに長けた人物として、社内で高く評価されている」 インタビューは人ありきだが、まず成果があってその開発者のインタビューの形がいい つまらないポジショントーク 会社のPRをするためのインタビューはいいことしか書かない インタビュー対象はPRをしたいが、インタビュアーがPRするとつまらない エッヂがきいてないと面白く無いのでネットでは注目されない 写真のメッセージ性が伝わらない おし
Rubyはメソッド呼び出しのカッコについても言及してあり、ある程度コードを書いていると納得できますね。 参考URL cookpad社のRubyスタイルガイド バッチ処理 非同期処理 非同期処理はアカウント登録後などにバックグラウンドで通信をする場合に使う必要がありました。アカウント登録がすぐに終わって後ろでは時間のかかる他サービスへの通信処理が動くようなイメージです。 例えるような話ではないですが、iOSアプリ開発の場合dispatch系の関数を使うなりして非同期処理を実行しコールバックによりその完了後に何かする、ということはかなり簡単なんですが、Webアプリではそういうわけにもいかないわけですよね。 非同期処理を動作させるためには処理する内容をジョブとし、永続的な保存をする領域にキューとして保存し、それを実行する必要があります。 おおまかに説明すると次のような感じなると思います 非同期実
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 突撃隣の六本木ヒルズ!@yimajoです。 iOSアプリ開発者に最近の開発スタイルを訊いてまわる「iOSアプリ開発の現場で訊いてみた」待望の7社目に行ってきました。 今回はフリマアプリのメルカリ社。 最近六本木ヒルズにオフィスを移転したとのことで広くて新しいオフィスでした。 訊いてきたこと インタビューに応じてくださったのはメルカリ社のiOSアプリ担当の@ooba、 @yam86、Androidアプリ担当の@operandoOSでした。 インタビュアーは過去インタビューに応じてくださった@kishikawakatsumiにも同席お願いし
// majorRadius and majorRadiusTolerance are in points // The majorRadius will be accurate +/- the majorRadiusTolerance @property(nonatomic,readonly) CGFloat majorRadius NS_AVAILABLE_IOS(8_0); @property(nonatomic,readonly) CGFloat majorRadiusTolerance NS_AVAILABLE_IOS(8_0); 雑に説明すると、タッチしたときの指の半径を返してくれる。 実際にiPad mini Ratina 2013で試した感じでは下記のような測定値になる 人差し指の指先でちょんと触って12から25.75000 人差し指をベタっと付けたら51から64.3906
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 確定申告は近所の地域区民センターで提出する派、@yimajoです。 iOSアプリ開発者に最近の開発スタイルを訊いてまわる「iOSアプリ開発の現場で訊いてみた」待望の6社目に行ってきました。 6社目はクラウド会計ソフトfreeeを作られているfreee社! クラウド会計ソフトfreeeとは何か freeeは銀行やクレジットカードのweb明細から簡単に帳簿を作成したり、青色申告決算書や確定申告書Bの出力に対応しているWebベースのアプリケーションです。 従来の青色申告用のアプリケーションはWindows専用が主流だったため、Macを使うiO
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 結論 小手先で楽をするためのボトムアップな設計は後々苦労する 継承を使った差分プログラミングは長年運用していくと大変だ 人は楽な方に流れるので、Baseクラスで解決すべきでない問題をBaseクラスで解決して後で困る はじめに この文章は2015年1月のpotatotips13で発表するネタ用のメモに書いてました。 実際に発表した内容を含む様子は下記のページにまとめています。 http://curiosity.co.jp/potatotips13/ 会場で質問されたりツイートの様子を見てて気づいたのですが、BaseViewControll
次のページ
このページを最初にブックマークしてみませんか?
『@yimajoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く