タグ

ブックマーク / www.tokoro.me (14)

  • 5分で終わるFirebase App Distribution(プロジェクト作成からテスターへの配信まで) | TOKOROM BLOG

    Firebase App Distiribution 先日BETA公開されたFirebase App Distributionですが2020年3月終了のFabricからの移行先としてはもっとも有力ですよね1。 先日「Firebaseを利用していない既存アプリを配信するためだけにFirebase App Distributionを使いたい!」と思い試してみたら、あまりにも簡単で「これは10分で設定から配信まで完了するんじゃない?」と思い、実際に、 Firebase未導入のビルド可能なプロジェクトがある状態 Firebaseのプロジェクトを作成するところから開始 配信用にアプリをビルドしてFirebase App Distributionでテスターに配信するところを終了 という条件で実際にストップウォッチで測ってやってみたところ、なんと「4分43秒」で終わりました! この記事用にスクショを撮影

    5分で終わるFirebase App Distribution(プロジェクト作成からテスターへの配信まで) | TOKOROM BLOG
  • Swiftでdeinitまで処理をdeferする | TOKOROM BLOG

    deferしてますか? Swift2でみんな大好きdeferさんが導入されましたね! guardと違いそんなに使う機会は訪れていないのですが、昨日、こんな感じで使いたい!という場面に遭遇しました。 CocoaLumberjackを使ってデバッグ用にUITextViewにログを吐くCustom Loggerを設定していたのですが、とあるViewControllerだけでそれを使いたく、ViewControllerがdeinitされたらそのCustom Loggerも当然外したい。 そんなコードを書く場合、defer大好きっ子ならCustom Loggerを登録した後にこんな感じで解除したくなりますよね(実際は僕はこのとき初めて実験でないところでdeferを使ったので、当のdefer大好きっ子はこんな間違いはしないだろう)。 let logger = TextViewLogger(textV

  • Swiftのextensionでstored propertyを追加する?(黒魔術は閉じ込める) | TOKOROM BLOG

    extensionでstored propertyを追加したくなることありますか? 少なくともSwift 2.1時点ではextensionでstored propertyを追加することはできず、computed propertyのみに限られます。 でも、ヤダヤダ!ぼくは絶対stored property追加したいんだい!ってことありますか? そう思っちゃうあなた、他に解決方法ありますよね?なんでそのやりかたにこだわるんですか?そういう思考になっちゃう時点でまだSwift脳に至ってはいないのではないでしょうか(建前)。 なお、ぼくはどうしても追加したんだい!ってことがあります(音)。 対象がAnyObjectならAssociated Objectsで代用できるよ で、そんな時は この記事 でやっているように Associated Objects で代用できることがあります。 対象にきちんと

    Swiftのextensionでstored propertyを追加する?(黒魔術は閉じ込める) | TOKOROM BLOG
  • これがXcodeでのバージョニングの決定版になるかも • Yuta Tokoro

    概要 この記事でできるようになること 安定してInfo.plistの内容(ここではBuild番号)を変更できる ふつうにRun Scriptで編集するとタイミングによってすぐにアプリに反映されないことがあったりしたがそれが解消される Info.plistに差分がでないのでcommitのときに邪魔にならない なお、この方法を教えてくれた熊谷さんがこの方法に行き着いた経緯や所感がこちらに詳しくまとめられています。詳細や考え方などをきちんと知りたいかたは是非、熊谷さんの記事をご一読ください! 必要な設定 Preprocess Info.plist file でInfo.plistをビルド前に確定させる Run Scriptで${TEMP_DIR}/Preprocessed-Info.plistを編集する 以下、具体的な話をします。 経緯 これまで、 デバッグ用やArchive用のアプリのバージョ

    これがXcodeでのバージョニングの決定版になるかも • Yuta Tokoro
  • Objective-Cで非同期処理のテストをシンプルに書く方法 | TOKOROM BLOG

    非同期処理のテストってどう書いてますか? 標準のXCTest自体がサポートしていれば良いのですがそうではないので、非同期処理のテストを書きたい場合には、その仕組みを自作するか出来合いのライブラリを利用する必要があります。現実的な選択肢としては、 GHUnitやKiwiなど非同期処理をサポートしたテストフレームワークを利用する GHunitの非同期処理のテストの仕組みを真似て抜粋したライブラリを利用する(意外とこれが多いかも?) expectaなどのマッチャーライブラリに付属の非同期処理の仕組みを使う となるかと思います。 ただ、私が調べた時点だとどれもしっくりきませんでした。 まず、GHUnitやKiwiなどを採択している場合には良いのですが、非同期処理のテストを書くという目的だけのためにそれらのフレームワークを使うというのは冗長すぎます。 また、GHUnitの非同期処理の仕組みだけを抜き

  • Storyboardでの画面遷移をスマートにやる方法 | TOKOROM BLOG

    これは potatotips第6回め で発表した この話 のまとめと後書きです。 Storyboardいいですよね! Storyboardを使うことで、 画面と画面が疎結合になる 簡単な画面遷移ならノンコーディングで実現できてソースコードを汚さない といったメリットがあります。 Storyboard登場以前だと、次の画面に遷移させるだけでも #import "NextViewController.h" NextViewController *nextViewController = [NextViewController new]; [self.navigationController pushViewController:nextViewController animated:YES]; といったコーディングをし、遷移元のViewControlelrは遷移先のViewController

  • Xcodeのプロジェクトファイル(pbxproj)がコンフリクトしまくるのをなんとかしたい! | TOKOROM BLOG

    2014/02/09 追記 コメントのところでやり取りしているようにmergepbxの作者さんから連絡があって、この記事で書いた問題が修正されました! 今現在は merge=mergepbx がいい感じになってきているのでそっちがオススメです。 複数人でプログラミングしているとpbxprojがやたらとコンフリクトする 例えば、 Aさんが AALabel.m をプロジェクトに追加して Bさんが BBLabel.m をプロジェクトに追加して とただそれだけなのにマージのときにコンフリクトするpbxprojさん。。。 ただそれぞれファイルを追加だけのことでコンフリクトするなんて… どうにかならんもんかいとTwitterでつぶやいたところ、 @azu_re さんから有り難い教えが! @tokorom gitはファイル別にマージ方法を指定できるので、mergepbxみたいなのをpbxprojのマージ

  • 会社でiOSアプリを扱うときのアカウント管理はこうするべきだった? | TOKOROM BLOG

    2013年11月18日 追記 この記事を書いた後、何人かのかたから「うちでは同じApple IDで両方とも使えているよ」というご指摘をいただき、 Member Centerのほうにアカウント追加 -> iTunes Connectに同じアカウント追加という順番だと「警告は出るもののかまわずContinueすれば」同じApple IDでアカウント作成可能 iTunes Connectにアカウント追加 -> Member Centerに同じ追加という順番だと「複雑な手順にはなるものの適切な手順を通せば」同じApple IDでアカウント作成可能 失礼しました。 追加情報などあれば是非おねがいします! 概要 私はiOSアプリの開発を3年以上やっていますが、恥ずかしながら会社でこのためのアカウントを管理/運用する方法をきちんと把握できていませんでした。 というのも個人で開発するぶんにはそんな管理は必

    会社でiOSアプリを扱うときのアカウント管理はこうするべきだった? | TOKOROM BLOG
  • iOSのライブラリだってTravis CIとかCoverallsとか使うべき | TOKOROM BLOG

    今日はGithubに公開したiOS用のライブラリを Travis CI と Coveralls に対応した手順を紹介したいと思います。 なお、実際にこれらを適用して運用しているリポジトリのサンプルは、 https://github.com/tokorom/BlockInjection になります。 前提条件 GitHubを使っていること GitHubでなんらかiOS/Mac用のライブラリを公開していること Travis CI https://travis-ci.org/ 目的 公開しているライブラリの最新コードがきちんとビルドが通るものか、テストが通る状態かを明示できます。 iOS用のCI環境を用意するのは通常すごく敷居が高い(物理的にMacが必要)のですが、Travis CIはiOS/Mac用のライブラリのCIを無料で請け負ってくれるかなり太っ腹なサービスです。 事前準備 Travis

  • Objective-Cのコードを削れるだけ削る7のTips | TOKOROM BLOG

    既存記事のまとめのため新しい要素があるわけではないのですが、Appleから発表されたXcode 5が正式にリリースされる前の復習ということで。 Tipsを適用する前のコード #pragma mark - Private Category @interface Sample () @property (strong) NSNumber* i; @property (strong) NSNumber* c; @property (strong) NSNumber* f; @property (strong) NSArray* array; @property (strong) NSDictionary* dictionary; @property (strong) Sample* child; @property (strong) UIColor* color; @property (assi

  • UIKitで使われている画像パーツをまとめて取得する | TOKOROM BLOG

    UIKitで使われている画像はどこにある? 例えば、UIAlertViewのアラートの画像ってどういう構成になってる?とかUISegmentedControlのAppearance変えたいんだけど当てはめる画像はどう作る?などというときにUIKitが標準で使っている画像パーツを参照できると便利です。 プログラマというか特にはデザイナさんにとって有用だと思います。 その画像パーツですが、Xcode(iOSシミュレータ)の中に入っているのでそこから抜くのが手っ取り早いです。 具体的には(これはiOS6.1の場合)、 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/System/Library/Frameworks

  • BlockInjectionで元のソースコードを汚さないで振る舞い追加 | TOKOROM BLOG

    例えばこんなコードに違和感はありませんか? 自分の場合よくあることなのですが、例えばiOSアプリを開発していて、Google Analytics のトラッキングのためのコードを加えるとき、 - (IBAction)sendButtonDidPush:(id)sender { // トラッキングのためのコード [tracker sendEventWithCategory:@"uiAction" withAction:@"sendButtonDidPush" withLabel:nil withValue:0]; // ... // 以降、送信ボタンを押したときの処理 // ... } こんなかんじにボタンが押されたときの処理のところにトラッキングのためのコードを埋め込んだりすると思います。 これはこれで問題はないのですが、プログラムのあちらこちらにトラッキングのためのコードを埋め込んで、

  • VimでObjective-Cのコード補完を実行する with clang | TOKOROM BLOG

    概要 VimEmacsでiOSアプリ開発をするときに「Snippetとかちゃんと設定してればXcodeほどのコード補完は必要ない」と強がりを言ってはみるものの「当はちょっとコード補完使いたいときあるんだよね」と思ってました。 そこで、重い腰をあげてVimでもObjective-Cのコード補完ができるよう設定してみました。 具体的には、 clangコマンドでのコード補完を試してみる その結果をもってVimの clang_complete プラグインを導入する という手順で実施しました。 結果として満足いく補完環境が整いましたので紹介させていただきます。 clangコマンドでのコード補完を試してみる clangコマンドはXcodeを使っていればはじめっから入っているコマンドです。 じつはこのclangコマンドを使うことでObjective-Cのコード補完が普通にできるとのこと。 具体的には

  • Objective-Cで少しでも疎結合なプログラムを書くためのチェックポイント | TOKOROM BLOG

    チェック1. なんでもかんでもヘッダーファイルでimportしていませんか? 例えば、こんなコードを書いていませんか? #import "OtherLibrary1.h" #import "OtherLibrary2.h" @interface Library @property (strong) OtherLibrary1* otherLibrary1; @property (strong) OtherLibrary2* otherLibrary2; @property (assign) BOOL flag; @end Libraryというクラスを作り、そこでOtherLibrary1とOtherLibrary2をpublicなpropertyとする場合、当然のごとくOtherLibrary1とOtherLibrary2のimportが必要なわけですが、なにも考えずにヘッダーファイルでO

  • 1