面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

備忘録

RxSwift+MVVMで出てくるサイトのコードの備忘録

RxSwift+MVVMで上位に引っかかるRealm academy.realm.io RxSwiftとMVVMを勉強しようとした際、上記サイトが上位にくるものの、記載されているコードを今写経してもエラーがでるのみで正常に動かなかった。 調べたり試行錯誤して動くようにできたので記録して…

Carthageでversion指定の書き方を忘れるのでメモ

ふとした時、書き方を忘れ、色々漁って探し直すのが大変なので、ここにメモとして残す。 基本 ~> で書くか == で書くことが多いと思う。 # コメント # ~> 互換性のある最大のversion指定 # ex. 3.0以上かつ4.0未満の最大のversion github "ReactiveX/RxSwift…

Macでのかな変換、カナ変換、英字変換

記事にした経緯 自分も知らなかったし、未だあまり知られて方法もあるので記載 方式名は適当につけているので正式名称ではありません。 また、日本語キーボード基準で記載しているので、英字キーボードの人は適宜読み替えが必要かもしれません、 FunctionKey…

MacApp購入予定リスト(WWDCに備えて)

※一部絶対割引されないものも混じっている。 AppleScriptをSwiftで記述できるアプリ Scriptarian - Scripting Studio for macOS Git管理アプリ www.git-tower.com Diffアプリ www.kaleidoscopeapp.com 鉄板のDesignerアプリ Sketch - Professional Digital D…

UIColorの比較で単純に==や!=してはいけない話(Swift3コード追記)

UIColorの比較の注意点 UIColor同士を比較する際、==や!=で比較することは可能。 しかし、安易にこの比較を行なった場合、意図しない挙動になることもある。 その例が下記となる UIColorの作成時、white値を指定して作成することもできれば、rgba値を指定し…

読みたいまたは購入予定本

モバイルアプリ開発エキスパート養成読本 (Software Design plus)作者: 山戸茂樹,坂田晃一,黒川洋,藤田琢磨,山田航,田坂和暢,熊谷知子,森本利博,坂本和大,小形昌樹,鈴木大貴,志甫侑紀出版社/メーカー: 技術評論社発売日: 2017/04/11メディア: 大型本この商品…

Xcodeでファイル配置を変更した際に出るWarningの対処方法

Missing file (〜 is missing from working copy) gitで該当ファイルをコミットする Dependency Analysis Warning XcodeのUtilities(右カラム)>File inspectorのTarget Membershipからチェックを外す or ProjectのTargets>Build Phases>Copy Bundle Resource…

Library not loadedでCrashした時に行なった対処

Library not loadedでクラッシュとの遭遇 アプリを作っている時は、問題なく実機で実行できていたが、 iTunes ConnectにバイナリのUploadが終わって、メタデータ用のスクリーンショットを撮ろうとシミュレータで実行した際に下記内容のクラッシュに初遭遇し…

FirebaseをPodsを使わず直に取り込む際、DLするVersionに注意

前提 CocoaPodsを使わない Firebaseを直にプロジェクトに取り込む リンクが古い 前提に該当する人は、下記のリンクからzipファイルをDLする人が大半だと思う。 しかし、リンクを見るとFirebaseのバージョンが3.11となっている ここで今最新のFirebaseがいく…

Swiftの文字列にて、Implicitly Unwrapped Optional型の文字列を扱う際に失敗した話

Implicitly Unwrapped Optional型と呼ばれる下記のような記述を行うことで、 この変数を使う時にUnwrapしてくれるというのは大体の人は知っていると思う。 let hoge: String! しかし、Unwrapしない時もあり、そのパターンに嵌ったので今後同じことがないよう…

フリーのApple IDアカウントを使ってXcodeからアプリを実機転送できることで、App ID登録時にエラーを出してしまう可能性の問題

要約 Xcode7からApple IDアカウントがあれば、有料の開発者登録を行わずとも実機にアプリを転送できるようになった その結果App IDを無作為に作成することができ、アカウントが違っても同じApp IDを作成することはできないので、何故かApp IDの登録でエラー…

Swiftでsuper.init()前にプロパティを初期化しなければいけない理由

前提 Swiftで独自クラスを作成してinitメソッドを書く時、 この独自クラスが持つプロパティの初期化をsuper.init()の後に行って エラー( Property 'self.property' not initialized at super.init call )に会う人は少なからずいると思う。 Objective-Cでは、…

ViewControllerのpresentedViewControllerを辿る際の落とし穴

iOSのプログラムを書いている際、最前面に表示されているViewControllerを取得したいと思うことがある。 この時、rootViewControllerからpresentedViewControllerがnilになるまで取得して、 最前面のViewControllerを求めることを少なからずやったことだと思…

DS215jとMacの接続プロトコルはafpの方が速いかもしれない

環境 タイトル通りなのだが、うちの環境を晒すと下記な感じ。 ・WindowとMacを併用 ・SynologyのNAS「DS215j」を使用 (構成はWDのRed4TB×2でSynology Hybrid RAID) ・NASは2台の橋渡し兼音楽や画像等のデータベース ・Windowsからはネットワークドライブの割…

JavaScriptでTextBoxに入力された内容からリンクを生成

仕事でURLSchemeのテストをする際、 TextBoxに入力された値からリンクを生成したかったので調べて作ったのを記載。 <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <header> </header> <body> <form name="form1" id="id_form1" action=""> <input name="textBox1" id="id_textBox1" type="text" value="" placeholder="文字列入力"/ size="45">…</form></body></meta></html>

Swift2のguard let構文で順序を意識せずクラッシュする書き方をしていた話

Swift2のプロジェクトの話 NSTimerを扱う処理を書いており、userInfoにBool値を渡して、後から安全にキャストして取り出す処理をguard letを使って下記のように書いていた。 // Swift2 // before func hoge(timer: NSTimer?) { guard let timer = timer, fla…

Scheme呼び出しで://の//をリンク形式でなら省略することができる

スマホアプリはでよく使う機能にSchemeがあると思う。jp.co.hoge://paramのような形式でアプリにあらかじめ登録しておくと、 スマホのブラウザから上記アドレスを呼び出すことでアプリを起動させ、 パラメーターによって処理を行わせる。このSchemeで//を省…

NSTimerでinitとscheduledTimerWithTimeIntervalは別物ということを知った話

NSTimerで処理を書いた際、repeatsをtrueにしているのに繰り返し処理してくれないで悩んだことがあった。initメソッドの public /*not inherited*/ init(timeInterval ti: NSTimeInterval, target aTarget: AnyObject, selector aSelector: Selector, userIn…

SourceTreeでgit-svnのリモートが表示されなくなった問題

現場ではSourceTreeを用いてgit-svnでバージョン管理を行っています。 そんなある日、リモートにあるSubversionの名前の横にある▷が表示されなくなっていました。以下加工画像によるイメージ before: after: これではサーバからプルもプッシュ何もできません…

Slackでアンケート機能を使う

現場の作業で、ルールを決めたり、コードの書き方に迷った時にこういう書き方はありかなしか というのを聞きたいなーと思うことがしばしばある。チームでSlack使っているし、アンケート形式で聞けたら解決できそうかなと思い、 Slackでアンケート機能を使う…

UIImageViewを継承しているCustomViewはdrawRectを通らない

うっかり忘れるので書いておく。タイトル通り。 UIViewを継承しているUIImageViewなので、 LifecycleとしてdrawRectを通りそうなものの、 UIImageViewを継承しているCustomViewは通らないため 処理を書いても意味がない。 参考 stackoverflow.comqiita.com

あると便利なextension"find"

Swiftで色々便利になったり、融通が効きやすくなったけど、 個々の状況では不便だな〜とか、こういうメソッドあったらいいのに〜と 思うことも多々ある。そんな時はextensionして使い勝手良くしてしまえばいい。 現場で教えて貰ったextensionで便利だなーと…

拡張子"xip"を調べてみた

Xcode8のbeta版配布時、サイトからDLしてくると.xipという拡張子でファイルを取得してくる。 特に気にせず、ダブルクリックで開けていたのできにしていなかったが、改めてどういう形式なのか気になり調べてみた。terminalでman xipと打つと下記のように説明…

iOS10でアプリ起動時にアプリのアイコンが拡大表示される現象

iOS10でアプリ起動時(Launch Screen)にアプリのアイコンが拡大表示される現象に遭遇したのでまとめときます。 <発生条件> iPadのみ (手持ちのiPhone6sでは発生しなかった) アプリのprojectにLaunch Screenを設定していないでBuildしている 現象の見た目は…

UIImageのRenderingModeのサンプルコード

1枚の画像で色だけ変えて使いまわしたいと思ったものの、 色の数だけ画像を用意するのも大変だし、動的に色を変えるのも難しいと思い、 いい方法がないか調べたところ、UIImageにRenderingModeなるものが存在することを今更知った。今回下記画像を用意し、実…

AVAudioPlayerで音が鳴らなかった問題

結論:インスタンスはプロパティで保持しろ do { let player = try AVAudioPlayer(contentsOfURL: fileUrl) player.volume = 1.0 player.numberOfLoops = 0 guard player.prepareToPlay() else { return } player.play() } catch let error as NSError { pri…

deferを正しく理解していなかった

使い方次第では便利なdeferだけど、理解しているようでやや理解していないというか勘違いしていた話。 // defer使用方法 defer { // 後から行いたい処理 } 下のような書き方してて、ふと処理Aと処理Bどちらが後から処理されるんだろうと思った。理解している…

AutolayoutのconstraintもIBOutletでソースに関連付けれる

StoryboardからUIViewやUIButtonをcontrol+ドラッグ操作でソースに関連づけて、UIをStoryboard、内部処理や動的変更をソースで行える。これがconstraintも同じことできて、状況に応じて動的変更ができると今さならがら知った。Autolayoutもちゃんと覚えれば…

iOSアプリの申請時に画像関係で引っかかった箇所

何度かiOSアプリの新規申請や更新申請を経験していて、慣れているもののそれでもたまにちょっとだけミスしてエラーになることがある。 現在プライベート開発で作成したアプリの1.0版が完成したので、申請を仲間内で協力して行っていたのだけど、 スクリーン…

UIView(とおまけでUIViewController)のLifecycle

UIViewControllerのLifecycleは馴染み深く、よく使うしわかりやすいので覚えているから困らないけど、たまにUIViewのLifecycleの知識が必要になるときがある。 名前と処理と呼ばれる順序が脳内で一致していないので、ひとまず順序だけでもまとめておこうと思…

iOS9系のiPadで不可解なフリーズ現象

iOS9系のiPadで不可解なフリーズ現象に遭遇し、原因はわからないものの解消することができたので、 今後同じことに遭遇した時のために、備忘録として記載。 最小限のテストプロジェクトで試してみたが、再現できなかった。 発生した条件 iOS9のiPad端末(ただ…

guard let で2つ以上の変数をまとめて処理する

Swift2からoptional型をunwrapを保証しつつnilでないことを確認するためにguard let構文が用意されるようになった。 非常に便利なので積極的に使われるけど、括弧やreturnが必要なのでいくつもguard letを使おうとするとかさばるとおもっていた。しかし、実…

Swift2で数字をenumに変換

Swift2でtagを設定したObjectからenumに変換する時に調べたので、備忘録として残す enumType(rawValue: numberType) ざっくり書けばこんなん。 // tagをenumに変換 guard let direction = Direction(rawValue: sender.tag) else { return }

CGFloatを使う時の注意点

Objective-CやSwiftを使ってiOSアプリを開発する時、小数点使用する型は8割CGFloatを使う。 このCGFloatを使う時に Use of undeclared type 'CGFloat': did you mean to use 'CGFloat'? というエラーが出たことがあった。 解決方法は単純に、UIKitをimportす…

presentedとpresentingの違い

たまにpresentedviewcontrollerとpresentingviewcontrollerの違いがわからなくなるのでメモA presentViewController B B presentViewController C となった時、画面手前から奥にかけてC > B > Aの階層になる。この時、Bから見て…、 - presentedviewcontrol…

El Captainでpodsが使えない

El Captainでpodsが使えないとかなんとか。 自分はpods嫌いだし、極力Frameworkも使いたくない人だけど、使わざるを得ないことがあるかもしれないのでリンクだけ貼っておくhanhan's blog - El Capitanでpodが使えなくなったら試すこと

UIColorの設定で色が正常に表示されなかった現象

ViewControllerのbackgroundColorに色設定しようとしたのに、何故か真っ暗になって困った話 viewWillAppear(_:)でUIColorでCGFloat(0xNN / 0xMM)みたいに指定して色設定しているのに、実際に表示せたら画面が黒一色だった。 print文で吐かせて数値みたら下記…

使いにくいメソッドの再定義

そのままだと使いにくい、使えないので拡張やオーバライドして使ってるメソッド ローカライズの文字列呼び出す時、"commnet"は基本空文字だし、呼び出しが長くなるのはよろしくないのでこんな感じで定義してる func EXLocalizeString(key: String) -> String…

Localizeで苦戦した備忘録

知人らと少人数チームでアプリの開発をしているのだけど、英語でしかリリース予定ないとは言え今後を見据えて勉強がてらLocalizeをやろうとしたら嵌った。色々やり方とか調べたり、過去関わったプロジェクトを思い出してこんなファイルがあって…とか試行錯誤…

2016/06/03 備忘録

Swift使ってて今更ながら知ったこと。 CGRectがsizeを挟まずにwidthとheightを取ってこれる self.view.frame.size.width が self.view.frame.width になるなんて…なんて楽なんだ。アプリの登録は済ませ、1度も公開していない状態でStoreのURLを知りたいとい…

2016/05/30 備忘録

クラッシュログをsymbolicateしてメモリのアドレスをアプリのクラスやメソッド名に変換してクラッシュの原因を解析するのは知っていたけど、 クラッシュログがなくても、クラッシュ時のexeptionで吐き出されるCallStackのメモリアドレスだけでもdSYMがあれば…

2016/05/18 備忘録

カメラで使うImagePickerでクラッシュするという報告が上がっていた。 どうも原因を調べると、ピンチアウトやピンチインでズーム等をした際に表示されるzoom sliderが出ている時に、 カメラ画面を閉じるとクラッシュすることがあるらしい。閉じる処理を遅ら…