タグ

ブックマーク / blog.kishikawakatsumi.com (68)

  • SwiftでKeychainを簡単に使うライブラリ "KeychainAccess" を書きました - 24/7 twenty-four seven

    kishikawakatsumi/KeychainAccess · GitHub そろそろSwiftをちゃんと勉強しようと思って作りました。 Swiftで書かれたKeychainのラッパーの中ではもっとも高機能でかつ簡単に使えるものができたと思います。 機能としては下記を備えています 簡単に使えるインタフェース アプリ間のキーチェーン共有 アクセシビリティ(バックグラウンド動作時の制限など)属性のサポート iCloudによるキーチェーンの同期 Touch IDによるキーチェーンの保護(iOS 8〜) iOSとOS Xの両方の動作をサポート インストール Carthage github "kishikawakatsumi/KeychainAccess" CocoaPods pod 'KeychainAccess' CocoaPodsを使う場合、CocoaPodsのバージョンはbeta版の0.

    SwiftでKeychainを簡単に使うライブラリ "KeychainAccess" を書きました - 24/7 twenty-four seven
  • Swiftで使いやすいAPIを書くために気をつけていること - 24/7 twenty-four seven

    先日iOSオールスターズ勉強会でSwiftでライブラリを書く際に良いと思ってることについて話しました。そこで好評だったり同意してもらえた何点かについてあらためてまとめます。 オーバーロードを積極的に活用しよう Swiftではメソッドのオーバーロード(引数の数、型、および戻り値の型が異なる同じ名前のメソッドが定義できる)が言語仕様としてサポートされています。これは上手に使うと利用する側にとってとても書きやすくなるので積極的に使っていきましょう。 例えば下記のような例では、Objective-Cではデータ型によって複数のメソッドを使い分ける必要がありました。 (引数の型がNSStringかNSDataかでメソッドの名前が異なる) - (BOOL)setString:(NSString *)string forKey:(NSString *)key; - (BOOL)setData:(NSDat

  • Travis CIでビルドごとにiTunes ConnectのValidationを自動的に実行する - 24/7 twenty-four seven

    コマンドラインからiOSアプリケーションをiTunes Connectにアップロードする - 24/7 twenty-four seven ↑ こちらの記事で書いたように、コマンドラインからiTunes Connectへのアップロードや、バリデーションができるのを利用して、Travis CIを使ってビルドするたびに自動的にバリデーションを実行するようにしました。 これにより、プライベートAPIを利用していたり、必須なサイズのアイコンやLaunchImageが無いなどの理由でバリデーションエラーになってアップロードが失敗するということが未然に防げます。 ARCを使う場合、ヘッダに載っていないメソッドを呼ぶのはコンパイルエラーになるので、知らずにプライベートAPIを使ってしまうようなことは現在はほぼありません。 しかし、iTunes Connectのバリデーションはあまり賢くないので(おそらく

    Travis CIでビルドごとにiTunes ConnectのValidationを自動的に実行する - 24/7 twenty-four seven
  • Travis CIでiOSアプリのリリース作業を自動化する - 24/7 twenty-four seven

    この記事において利用している.travis.ymlとRakefileの全体はGistにて公開しています。 ↓ Rakefileの全体はこちら gist.github.com/kishikawakatsumi/8918124 ↓ .travis.ymlはこちら gist.github.com/kishikawakatsumi/8918365 概要 ユビレジではiOS アプリを申請する際に発生する作業の大部分をCIで自動化しています。 申請の作業としてユビレジでは下記のワークフローを決めています。 1. リリースブランチを作る 2. リリースするバージョンのバイナリをビルドする 3. 2と同等のアプリケーションを社内に配布して最終チェックをする 4. クラッシュレポートのサービスとしてCrittercismを利用しているので、そこにデバッグシンボル(dSYM)をアップロードする 5. 2のバイ

    Travis CIでiOSアプリのリリース作業を自動化する - 24/7 twenty-four seven
  • iOS 8のすべてのエクステンションはオプトイン方式 - 24/7 twenty-four seven

    ↓ 昨日Todayウィジェットについて書いた記事についてのコメントに、通知センターがスパムコンテンツだらけになるんじゃないの?と心配されてる方が少しいらっしゃいました。 通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven 現状の仕組みではそれについてはそれほど心配はいらないと思います。 (通知センターに勝手に入る心配はないということであって、スパムアプリが氾濫しないという意味ではないです。 あと、特にTodayというセマンティクスに合ってない単なるランチャーのウィジェットも通っているので今のところ審査はそれほど厳格じゃないんじゃないかなと思います。 私個人としては、通知センターは単にアクセスのよい場所という認識なので、そこに置くのが便利なのであればランチャーでも何でもアリかなと思っています。) エクステンショ

    iOS 8のすべてのエクステンションはオプトイン方式 - 24/7 twenty-four seven
    tarchan
    tarchan 2014/09/25
    >ユーザーが自分でそのエクステンション有効にしない限り、アプリケーションをインストールしたら勝手に通知センターのところに現れるということはありません。
  • 親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました - 24/7 twenty-four seven

    N+Keyboard iOS 8からサードパーティのキーボードを利用できるようになりました。 以前にも親指シフトキーボードの使えるエディタとしてN+Noteというものをリリースしましたが、当然そのアプリでしか使えないという制限がありました。 しかし、これからはどんなアプリでも好きなキーボードを使うことができるようになります。 正直、現状のAPIを使って日語変換を実装するのはなかなか困難なのですが、やってやれないことはないのでいろいろなキーボードがリリースされて、APIも機能拡張が進んでいけばいいなと思います。 親指シフトを使ってるひとはぜひ(安い価格ではないですが)ダウンロードして使ってみてください。 カスタムキーボードはアプリケーションをダウンロードするだけでは使えるようになりません。 設定アプリからキーボードを有効にする必要があります。 「設定」アプリから「一般」>「キーボード」>「

    親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました - 24/7 twenty-four seven
  • 通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven

    iTunes の App Store で配信中の iPhone、iPod touch、iPad 用 今日のアニメ ※ 通知センターに表示できるのはiOS 8を使っている場合だけです iOS 8から通知センターに任意のウィジェットを表示することができるようになりました。 通知センターといえば、ロック画面、ホーム画面に次ぐ一等地であり、そこをほぼ自由に使える存在というのはかなりすごいことで(ホーム画面はそもそも開放されてない、ロック画面は制限付き(通知とPassbook, iBeaconなど))、間違いなく戦争が始まるので、今のうちにいろいろ確認しておくべきだろうと考えて作ってみました。 ↑ アプリケーションとしては通知センターに今日放映されるアニメ番組表を表示するというものです。 どこからでも(ロック画面からでも)サッと呼び出せるので、まあ必要なひとにはそれなりに便利かと思います。 で、まあ

    通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven
  • iOS 8 beta5にてポップオーバーをキャンセルするための暗いところを連続でタップすると下にあるモーダルビューも閉じてしまうバグ - 24/7 twenty-four seven

    一昨日くらいにiOS 8でテストをしていたら見つけました。 問題となる画面構成を多用するアプリケーションにとっては、修正が間に合わなければけっこう致命的と思われるので共有します。 (Base SDKをiOS 8にしてビルドしない限りは起こりません。リリース済みのアプリケーションをiOS 8で動かすぶんには問題無いです。) ↓ バグレポートした内容は下記の記事で公開しています。 重ねてレポートすると優先順位があがるかもしれません。 Radar: When double-tap the dimming view to dismiss the popover, it will also close modal view under - 24/7 twenty-four seven サンプルコード ↓ バグレポートに添付した問題が再現するサンプルコードです。 Xcode 6でビルドして、iOS 8

    iOS 8 beta5にてポップオーバーをキャンセルするための暗いところを連続でタップすると下にあるモーダルビューも閉じてしまうバグ - 24/7 twenty-four seven
  • Travis CI (Pro) の実行をジョブの並列化とBundlerとCocoaPodsのキャッシュで速くした - 24/7 twenty-four seven

    ユビレジではTravis CIを使って、テストの実行とベータ版のTestFlightへのアップロードを自動化しています。 Pull Requestが送られた時と、マージされた時に自動でマージした結果のベータ版が配布されるので、手元で変更をすぐに試すことができて便利です。 【参考】 Travis CIでiOSアプリのテスト&ベータ版の配信に使っているRakefileを改善したメモ - 24/7 twenty-four seven ユビレジのiPadアプリのCI環境をJenkinsからTravis CIに移行したときのまとめ - 24/7 twenty-four seven ただ、これは導入当初からあった問題なのですが、Travis CIにジョブが登録されてから終了するまで、だいたい20〜25分くらいと、少し時間がかかるのが気になっていました。 そこでジョブの並列化と、BundlerとCoco

    Travis CI (Pro) の実行をジョブの並列化とBundlerとCocoaPodsのキャッシュで速くした - 24/7 twenty-four seven
  • iOS 8でIn-App Purchaseの状態に追加されるSKPaymentTransactionStateDeferredの影響を考える - 24/7 twenty-four seven

    In-App Purchaseでプロダクトの購入を扱うときにはStoreKitのSKPaymentTransactionStateを使います。 例えばPurchasedなら購入完了なのでプロダクトのダウンロードを始める、Failedなら失敗なのでアラートを出すなどとします。 iOS 8からはその状態に新しくSKPaymentTransactionStateDeferredが追加されます。 2014/8/6時点ではまだドキュメントに解説はありません。 API diffとヘッダには記載されています。 WWDCのセッション218, 303ではそれなりに詳しく解説されていますので参考になると思います。 Deferredという状態は「Ask to Buy」というiOS 8のApp Storeの新機能のために導入されました。 「Ask to Buy」はiOS 8で搭載される「ファミリー共有 (Fami

    iOS 8でIn-App Purchaseの状態に追加されるSKPaymentTransactionStateDeferredの影響を考える - 24/7 twenty-four seven
    tarchan
    tarchan 2014/08/07
    >子どもがApp Storeから購入する際に親の許可を必要とすることができるというペアレンタルコントロールの強化
  • Storyboardを1画面ごとに分割した話 - 24/7 twenty-four seven

    今年の5月くらいの話なのですが、ユビレジのiPadアプリケーションのプロジェクトで使っているStoryboardを基的に1画面(≒1 View Controller)の単位に分割するということをしました。 1画面1Storyboardメソッドについてはnakiwoさんが書かれた記事も参考になります。 1画面から始めるStoryboard - Cocoaメモ ↑ 上記の資料はどちらかというとStoryboardを使い始めるにあたって、1画面単位で少しずつ使っていこうという感じですが、ユビレジではもともとほぼ全部の画面がStoryboardになっていました。 ただ複数人で共同作業をするにあたっては、1画面単位を1ファイルにしておくくらいがメンテナンスしやすいんじゃないかなあという結論になったのでしばらくそういうふうに運用することにしました。 また、XIBと違ってStoryboardは単純にコ

    Storyboardを1画面ごとに分割した話 - 24/7 twenty-four seven
    tarchan
    tarchan 2014/07/31
    >画面の遷移という基本的な処理を理解するのに標準でないAPIをまず知らなければならないという状況は、少なくとも人の変化がこれからも頻繁に起こることが考えられる中では避けたい
  • NSArrayやNSDictionaryからNSNullを効率よく取り除く - 24/7 twenty-four seven

    iOSアプリケーションでWeb APIから返ってきたJSONを処理するのにNSNullの扱いに困っていて、事前にNSNullを取り除いてしまうのが事故を防ぐための確実な方法なのですが、再帰的にすべての要素を検査する以外になにかいい方法がないかと思って考えていたらちょっとおもしろい方法を思いついたので書いてみました。 kishikawakatsumi/CollectionUtils · GitHub ↑ に含まれるCUCompactArrayとCUCompactDictionaryです。 NSArrayとNSDictionaryのサブクラスとして実装されていて、次のようにして生成します。 (普通にalloc/initを使って生成することも可能です) NSArray *array = @[@"0", @"1", [NSNull null], @"2", [NSNull null], @"3"]

    NSArrayやNSDictionaryからNSNullを効率よく取り除く - 24/7 twenty-four seven
  • ユビレジのiPadアプリのCI環境をJenkinsからTravis CIに移行したときのまとめ - 24/7 twenty-four seven

    こちらの記事について、最新のTravis CIの環境(2014/4/15)ではコード署名に失敗する問題があります。 その問題の修正については下記の記事にまとめました。 Travis CIでipaを作るときのCode Signが失敗するのを修正したメモ - 24/7 twenty-four seven 実際は完全に移行したわけではなくて、Travis CIの有料プラン(プライベートリポジトリが使える)のフリートライアルを試しているところなのですが、しばらくはTravis CIでCIを動かすことにしたので、そのときの設定などをまとめます。 もともとは社内のサーバでJenkinsをホストしていて、それがダメということは全然ないのですが、社内でサーバをメンテナンスするのも面倒だし、ビルドスクリプトとかをポータブルな状態にしておくのは手元でサクッと実行できたりいろいろ都合が良さそうだと思い、試しにや

  • Conference with DevelopersでJavaScriptCore.frameworkとObjective-C Runtime APIについて話しました - 24/7 twenty-four seven

    年に1度のiOSデベロッパーのイベント「Conference with Developers」で話をしました。 JavaScriptCore.frameworkとObjective-C のRuntime APIという非常にマニアックな内容でしたが、まあまあわかるように伝えられたかなと思います。 話の内容は主に以下の3点です。 JavaScriptCore.frameworkの概要と使い方 Objective-C Runtime APIの活用方法 JavaScriptBridgeの紹介 伝えきれなかったことを補足しますと、JavaScriptBridgeはフルスクラッチで最初から最後まですべてJavaScriptでiOSアプリを書く、という用途のために作られたのではありません。 例としてそういうものを示しているのは、単に例は極端なほうがわかりやすいというだけの理由です。 どちらかというと、週

    Conference with DevelopersでJavaScriptCore.frameworkとObjective-C Runtime APIについて話しました - 24/7 twenty-four seven
  • One-line fix for UITextView on iOS 7 - 24/7 twenty-four seven

    【参考】untitled - iOS 7 のテキスト入力欄(UITextView)の問題について iOS 7のUITextViewのバグを1行で直す裏ワザ [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"UIDisableLegacyTextView"]; 解説 iOS 7にはバグだらけのUITextViewのほかに_UICompatibilityTextViewというiOS 6以前のUITextView(と思われる)クラスがあり、 メモ(Notes.app)など同様の不具合が再現しない標準アプリは_UICompatibilityTextViewが使われている。 そしておそらくこのフラグによってUITextViewをインスタンス化したときにどちらが使用されるかが変わる。 以下のようにmain.mあたりで設定すると有効にな

    One-line fix for UITextView on iOS 7 - 24/7 twenty-four seven
  • JavaScriptだけでiOSのUIを書いてみる - 24/7 twenty-four seven

    この投稿は iOS Advent Calendar 2013 - Qiita の22日目の記事です。 iOS 7から新しく追加されたJavaScriptCore.frameworkを使ってJavaScriptだけでUIを書いてみましょう。 JavaScriptCore.frameworkの基 (Objective-C -> JavaScript) まずJavaScriptCore.frameworkの基的な使い方は次のようになります。 JSContext *context = [[JSContext alloc] init]; [context evaluateScript:@"a = 10;"]; JSValue *value = context[@"a"]; NSLog(@"%d", value.toInt32); // => 10 ↑ まずJavaScriptの実行環境としてJS

    JavaScriptだけでiOSのUIを書いてみる - 24/7 twenty-four seven
  • チュートリアルなどでUIPageControlを使うときは標準のアクションに対応するのを忘れずに - 24/7 twenty-four seven

    UIPageControlはiPhoneのホーム画面でも使われている、今何ページ目かを示すUIControlのサブクラスです。 最初のiOSからあって、特徴的なUIなのでフリックでページをめくる画面ではこれを使って現在のページを示すのが定番になっています。 特に最近では初回起動時のチュートリアル画面でよく使われます。 ただ、意外と経験のあるひとが書いたものでも、このコンポーネントがタップによって値が変わるコントロールであることを忘れているのをけっこう見ます。 これを忘れると、UIPageControlのドットのところをタップすると、ドットの場所は変わるのに画面は変わらないので、ちょっとマヌケな感じになってしまいます。 UIPageControlはUISliderなどと同様にUIControlのサブクラスなので、基的にユーザーの操作によって値が変わるコントロールです。 見た目に特徴があるの

    チュートリアルなどでUIPageControlを使うときは標準のアクションに対応するのを忘れずに - 24/7 twenty-four seven
    tarchan
    tarchan 2013/11/18
    >これを忘れると、UIPageControlのドットのところをタップすると、ドットの場所は変わるのに画面は変わらないので、ちょっとマヌケな感じになってしまいます。
  • 親指シフトキーボードが使えるノートアプリ「N+Note」をリリースしました。 - 24/7 twenty-four seven

    入力に親指シフト(NICOLA)配列のキーボードが使えるエディタアプリです。 iOSではシステムキーボードを置き換える`inputView`プロパティというAPIが提供されているので、それを利用しています。 なので、どこでも親指シフトのキーボードが使えるというわけではなく、このアプリを使う場合だけ、ということになります。 親指シフトは「同時シフト」という入力方法が一般的ということで、普通のシフトと違って、「同時に」押すという入力が主流のようです。なので、意外にキーボードのグラフィックを用意してキーを割り当てるだけではダメで、同時判定とかけっこう大変といえば大変でした。 実は私は親指シフトキーボードは使ったことはなくて、調べた以上のことはわからないのでFacebookの親指シフトユーザー会の方々にいろいろとサポートいただきました。なんとかリリースできる形になったのはそのおかげでありとても感謝

    親指シフトキーボードが使えるノートアプリ「N+Note」をリリースしました。 - 24/7 twenty-four seven
    tarchan
    tarchan 2013/11/18
    >iOSではシステムキーボードを置き換える`inputView`プロパティというAPIが提供されているので、それを利用しています。
  • iOS 7のエンタープライズ向け新機能 Guided Access(アクセスガイド)のカスタマイズ - 24/7 twenty-four seven

    より詳しい記事はこちら ↓ iOS 7はアクセスガイド(Guided Access)が便利にカスタマイズできるって知ってました?(1/2) - iOS 7 徹底解剖 - Mobile Touch - モバイル/タブレット開発者およびデザイナー向け情報ポータル アクセスガイドとは iOS 6から導入された機能にアクセスガイドがあります。 これは一時的にホームボタンを無効にして1つのアプリケーションしか使えないようにしたり(クラッシュしても自動的にそのアプリケーションが再起動する)、タッチ操作を部分的に無効にして触ってほしくないボタンなどを使えなくするなど、いわゆるキオスクモードを実現できる機能です。 展覧会や店舗などでナビゲーション端末として一般のひとに貸し出して使ってもらう場合などに利用されます。 iOS 7では上記の機能に加え、アプリケーションごとに制限を定義できるようになりました。 こ

    tarchan
    tarchan 2013/11/18
    >タッチ操作を部分的に無効にして触ってほしくないボタンなどを使えなくするなど、いわゆるキオスクモードを実現できる機能です。
  • CoreTextを使って簡単に画像付きリッチテキストを表示できるSECoreTextViewに編集機能がつきました。 - 24/7 twenty-four seven

    kishikawakatsumi/SECoreTextView · GitHub iOS/Macの両方で使えて、文字の選択やリンクのクリックに対応したテキストビューをテスト公開しました。 - 24/7 twenty-four seven 前に書いたSECoreTextViewに編集機能を実装しました (iOSのみ)。 SECoreTextViewはCoreTextを使って簡単にクリッカブルなリンクや画像付きのリッチテキストを表示できるテキストビューの代替実装としてのライブラリです。 以前のものはそこそこ簡単に豊かな表現ができるのでこれはこれでけっこう実用的だったと思います。 ↓ このように画像を含めたテキストを表示したり、リンクはクリックに反応して任意の処理をすることができます。 画像に限らず、画面に表示できるものはボタンでもその他のビューでもブロックを渡して任意の描画をすることも可能です

    CoreTextを使って簡単に画像付きリッチテキストを表示できるSECoreTextViewに編集機能がつきました。 - 24/7 twenty-four seven
    tarchan
    tarchan 2013/10/04
    >UITextInput/UIKeyInput Protocol を実装して、標準のテキストビューと同じようにキーボードや日本語変換システムの入力を処理しています。