なんとかするから、なんとかなる

エンジニア関係のことを書きます

Swift

iOS UITextField でRetrunを押したときにキーボードを閉じる。iOS UITextField How to dismiss the keyboard when user tap a retrun key.

English version below. はじめに 意外と忘れてしまうことの方法。 実はきちんとAppleの公式ドキュメントにも書かれています。 やり方 UITextFieldDelegate に適合する 対象のUITextFieldインスタンスのDelegateを設定する textFieldShouldReturn:を実装する…

RxSwift ObserverとPublishObject, BehaviorSubject

はじめに 今さらながらRxSwiftを試して見ました。 Disposable Observerしている情報を保持しているオブジェクト Disposable.dispose()を呼び出すことで通知の解除が可能 複数のDiposableを一度に処理するためにDisposableBagがある ObserverとPublishObject …

iOS Carthage で"dyld: Library not loaded: Reason: image not found"の対処法

背景 Carthageで Cartfileに記述 例ではGitHub上の"YOUR_LIBRARY"というフレームワークを導入。 github "YOUR_LIBRARY" ~> 1.0 コマンドラインでコードを実行 $ carthage update --platform iOS ビルドしてみると次のエラー発生。 dyld: Library not loaded:…

iOS UITableViewのdeleteRows(at:with:)で落ちる (UITableView deleteRows(at:with:) is crashed)

English version is below. はじめに UITableViewを使っていて、deleteRow(at:with:) を読んだときにクラッシュする問題にぶつかりました。 その解決方法について紹介します。 問題 次のようなコードを書いたときにアプリがクラッシュしました。 func tableV…

iOS Decodableで初期化したのに値が適用されない

背景 Decodableで構造体を初期化した際、値が代入されていなかったので、備忘録。 起きたこと 次のようなコードを書いたときに初期化時に値が入りませんでした。 json形式の値を受け取り、初期化したときに失敗しました。 struct SomeStruct: Decodable { le…

iOSでステータスバーの色を変更する

はじめに iOSのStatusBarの色を変更したいことはよくあります。 でも、やりかたをよく忘れてしまいます。 なので、まとめます。 アプリ全体での色の設定 info.plistで "View controller-based status bar appearance"にNOを設定 appDelegate.swift のdidFini…

iOSでViewControllerのライフサイクルでsuperを呼ぶべき?呼ばなくても良い?

背景 iOSの開発をしていると必ず必要となるViewController。 ViewControllerにはライフサイクルがあります。 ここまでは、普通の話ですがライフサイクル中のメソッドviewDidLoadなどで 親クラスのメソッドsuperを呼び忘れることがあります。その場合大丈夫な…

iOSで.xcodeproj/project.pbxproj ファイルを編集したときにエラーが起きた時の解決方法

背景 Gitでマージがコンフリクトすることはよくあります。 今回は xcodeproj/project.pbxproj がコンフリクトしたときに少し詰まったのでその解決方法を紹介。 起こったこと Gitで xcodeproj/project.pbxprojに手作業で修正したとき次のようなエラーがでまし…

Xcode「...nib but the view outlet was not set」というエラーが出たとき

背景 xibファイルを利用してCustomViewを作成して、ViewControllerと接続したときに遭遇した問題です。 解決方法 File's OwnerのCustomClassを設定する OutletsのViewとviewを接続する Interface Builderへ行き、~~ViewController.xibのFile's Ownerの上でCo…

JenkinsでiOSアプリをテスト後にレポートを確認する

概要 JenkinsでiOSアプリをテスト後にレポートを生成する方法 少し前に試した内容なので少し情報が古いことがあると思います。 背景 iOSアプリをテストする場合、xcodebuildをコマンドラインで実行することでテストができる。 ただし、xcodebuildで実行した…

iOSのUIColorをカラーコードで設定する

UIColorをカラーコードで指定したいときって多いですよね。どうして公式対応してもらえないのだろう。 私はいつの以下のようなExtensionで拡張しています。 extension UIColor { /// Hex表記でカラーを生成 /// /// - Parameters: /// - hex: カラーコード /…

iOS でCarthage updateでエラーが発生したときの対処法

Carthage updateをしたときに次のようなエラーが発生した際の対処法 A shell task ("YOUR_PRODUCT_PATH" CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES -list) failed with exit code 72: xcrun: error: unable to find utility "xcodebuild",…

iOSのUINavigationControllerを利用した画面遷移まとめ

UINavigationControllerを利用した、画面遷移にメソッドのまとめです。 画面を閉じる/戻る dismissViewController Modalダイアログで表示された場合に画面を閉じる popViewController UINavigationControllerで管理されている場合に画面遷移を戻る popToRooV…

自前でUITableViewCellクラスを作成する

UITableViewCellはよく使うクラスの1つだと思います。 少しiOS開発に慣れてくるとUITableViewCellをカスタマイズしたくなります。 その際の手順を簡単に紹介 UITableViewCell を継承する init(style: UITableViewCellStyle, reuseIdentifier: String?)をオ…

iOS のAutoLayout(オートレイアウト)を扱うときのTipsまとめ

AutoLayout AutoLayoutエンジン AutoLayoutエンジンは外接矩形(装飾(影など)を除いたViewで計算) Debugのテク デバッグ中に外接矩形を見るためには [Product]->[Scheme]->[EditScheme]->[Run]->[Argument]に-UIViewShowAlignmentRectsを追加 Instric Con…

iOSのPush Notification登録の流れ

iOSのプッシュ通知の登録流れが割と忘れやすいので、まとめてみる 証明書署名を申請するCSR アプリケーションをプッシュ通知に登録(APNs)する Push Notification開発証明書を発行する Provisioning Profilesを作成する。

UILabelのフォントサイズだけを変更する

UILabelのフォントを変更する場合、次の方法がまず思い浮かぶでしょう。 var label = UILabel() lablel.font = UIFont.systemFontOfSize(20) でもこれだと、フォント自体も変わってしまう。システム以外のフォントを使っているときにフォントサイズを変更だ…

Implicit Getter Violation の修正方法

SwiftLintを使っているときに見かける"Implicit Getter Violation" 要するに、Gettterの宣言方法がスマートではないということ。 修正方法は次の通り。 // × var hoge: String { get { return "fuga" } } // ◯ var hoge: String { return "fuga" } SwiftLint…

レガシーコード改善を読んで その2

本投稿の話題 既存コードを変更する際の技。今後、テストを導入できるようにするための布石となる方法。 Swiftに適応するならどうするか。 スプラウトメソッド 既存のメソッド内に、新たなメソッドを呼び出すように変更を加える方法。 新たなメソッド内だけ…

UserDefaultsを初期化する

UserDefaults を初期化するためには if let bundleId = Bundle.main.bundleIdentifier { UserDefaults.standard.removePersistentDomain(forName: bundleId) } persistentDomain(forName:)で domainNameで指定した、KeyとValueのディクショナリーが受け取れ…

iOSで使いにくいUserDefaultをなんとかする

はじめに iOSアプリにおいて、アプリを消しても値を保存しておける、UserDefaultはとても便利だと思う。 しかしながら、どうしても使いにくい部分が存在する。 例えば、UserDefaultの値を取り出すKeyがStringなところだ。 よくある使い方 // 保存する UserDe…