タグ

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

  • Apple IDの2ファクタ認証をCI環境で突破する - 24/7 twenty-four seven

    【注意】この記事で紹介しているSMS APIサービスのVonageは利用規約により認証にVonageの電話番号を利用することを禁止しているという記述があるので、末尾の別解として載せたAndroidデバイスを使ってSMSを転送する方法が良さそうです。 help.nexmo.com 2021年2月から、App Store Connectにログインする際にすべてのApple IDで2ファクタ認証が必須になります。 Starting February 2021, additional authentication will be required for all users to sign in to App Store Connect. This extra layer of security for your Apple ID helps ensure that you’re the only

    Apple IDの2ファクタ認証をCI環境で突破する - 24/7 twenty-four seven
    koogawa
    koogawa 2021/01/26
  • Auto Layoutの静的な制約で実現するカラム幅が可変のテーブル - 24/7 twenty-four seven

    次に示すような見出しと各カラムが右寄せ、ラベルの文字数によってカラムの幅が伸縮し、広くなった場合は隣の列を押し出し、短くなった場合は少なくとも見出しの幅に収まり、各列の間には一定のマージンを置くというテーブルレイアウトを、静的なAuto Layoutの制約だけで作ることを考えます。 このような、UIコンポーネントが持つコンテンツの大きさによって隣接するコンポーネントを押し出すような場面ではAuto Layoutがとても効果的に働きます。 Auto Layoutなしで実現しようとすると、列ごとの各行の文字幅を計算し、最大の幅に合わせて再配置する、という処理をコンテンツが変わるたびに行うということになりますが、Auto Layoutの制約を使用する場合ではそもそもレイアウトの再計算を自分でやる必要はないので、コンテンツの変わったタイミングなどを気にする必要はありません。 ただデータを再代入する

    Auto Layoutの静的な制約で実現するカラム幅が可変のテーブル - 24/7 twenty-four seven
    koogawa
    koogawa 2018/11/06
  • iOSDCでテストしづらいコードをテストしやすくするための方法について話しました - 24/7 twenty-four seven

    speakerdeck.com 日で開催されるもっとも大きなiOSに関するカンファレンスの1つであるTop | iOSDC Japan 2017に参加し、表題の内容で発表しました。 聴いてくださった方々からは好評のようでよかったです。発表資料は題と関係のない話がちょこちょこ挟まったり、口頭の説明がないとわからないページがあり、スライドだけでは意図がよく伝わらない恐れがあるので、こちらで内容について補足します。 伝えたかったテーマは「依存が大きく複雑で、単体でテストしづらいコードを単体で動かしてテストできるようにするには」ということです。その題材として一般的に依存が複雑でテストしづらいコンポーネントであるビューを例として取り上げました。ですのでビューやUIをテストするということに絞った話ではなく、どのレイヤーに対しても複雑にいろいろな依存関係があってユニットテストが書けないという状況を改

    iOSDCでテストしづらいコードをテストしやすくするための方法について話しました - 24/7 twenty-four seven
    koogawa
    koogawa 2017/09/19
  • 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
    koogawa
    koogawa 2016/03/29
  • 懇親会における英会話のプロトコル - 24/7 twenty-four seven

    前回の記事では、カンファレンスをより楽しむために積極的に人と(特に海外の人と)話そうと書きました。しかしそうはいっても、言葉に自信がなかったりしてなかなか積極的に話しかける勇気が持てないかもしれません。 でも心配いりません。懇親会(ミートアップ)の会話はほとんど決まった形で始まるので、それを覚えておけばとりあえずなんとかなります。 挨拶と自己紹介のプロトコル とりあえずこの手順だけ覚えておきましょう。以下の流れから外れることは90%ありません。 (相手を見て)声をかける「Hi」 名前を言う。「I'm Katsumi」/「My name is〜」 「どこで働いてる/何をしている」か聞かれるので答える。「I'm iOS developer, work at Realm」/「I'm working at Realm. I develop〜」 要するに、1. 声をかけて、2. 名乗って、3. 自己

    懇親会における英会話のプロトコル - 24/7 twenty-four seven
    koogawa
    koogawa 2016/02/28
    自作のアプリとかあると会話が続きそう。"Could you say that again?" も覚えた!😄
  • try! Swift 2016を200%楽しむために - 24/7 twenty-four seven

    いよいよ今週はtry! Swift 2016が開催されます。 せっかくの機会ですので貴重なチケットを手に入れられた方にtry! Swift 2016を最大限楽しんでいただくために、ちょっとしたコツをお話しします。 公式アプリ try! Swift公式アプリがAppStoreから配信されています。タイムテーブルやセッション概要などが掲載されていますので、事前にインストールしておきましょう。Apple Watchを持っていれば時計の文字盤に情報を表示することもできます。 try! Natalya Murashevソーシャルネットワーキング無料 公式Slackチャンネル 参加者のみなさんをtry! SwiftSlackチャンネルにご招待しています。もし、招待メールが届いていない方は info@tryswiftconf.com にご連絡ください。Slackでは自己紹介や、質問など、自由に参加者お

    try! Swift 2016を200%楽しむために - 24/7 twenty-four seven
    koogawa
    koogawa 2016/02/28
    楽しみすぎる
  • 2016年3月2日〜4日、try! Swiftカンファレンスを開催します。 - 24/7 twenty-four seven

    try! Swiftエンジニアが主役のSwiftに関するカンファレンスです。今回は会期を3日間(!)、著名エンジニア海外・国内)による招待講演を予定しています。 http://www.tryswiftconf.com/ 講演とプログラムについて 現在Webサイトには12人の講演者が掲載されていますが、さらに21人、合わせて33人の講演を予定しています。 会期中は、セッション以外にもオフィスアワー、アフターパーティ(懇親会)なども検討しています。 特に海外から来られる講演者の方々は皆、日のデベロッパーとコミュニティのことを知りたいと強く考えています。 そのため、オフィスアワーや懇親会の時間以外でも、ランチタイムや朝の時間などに講演者の方と直接話すことのできる機会を多く設ける予定です。 日にいながら、世界のトップレベルのエンジニアの方々と直接コミュニケーションをとれる機会は非常に貴重

    2016年3月2日〜4日、try! Swiftカンファレンスを開催します。 - 24/7 twenty-four seven
    koogawa
    koogawa 2015/12/03
    1日チケットもあるんですね!
  • 接続先がATS (App Transport Security)に対応しているか、または例外の設定をnscurlコマンドで簡単に調べる - 24/7 twenty-four seven

    TL;DR, $ nscurl --ats-diagnostics --verbose https://kishikawakatsumi.com/のようにnscurlコマンドに--ats-diagnostics --verboseオプションをつけて実行すると、指定したドメインがATSの要件を満たしているかどうかをチェックし、デフォルトの設定でエラーが起こる場合はエラー回避するための設定まで教えてくれます。 developer.apple.com iOS 9からATS (App Transport Security)の仕組みが導入され、HTTP(HTTPSでない)通信はブロックされ、HTTPSでも接続先がATSの要件を満たしてない通信についてはデフォルトで失敗するように変更されました。 HTTPの通信はブロックされます。 App Transport Security has blocked

    接続先がATS (App Transport Security)に対応しているか、または例外の設定をnscurlコマンドで簡単に調べる - 24/7 twenty-four seven
    koogawa
    koogawa 2015/10/19
  • 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
    koogawa
    koogawa 2015/09/20
  • StoryBoardまたはXIBについて、ファイルごとにDeployment Targetを設定する - 24/7 twenty-four seven

    昨日はじめて知ったのですが、StoryBoardやXIBファイルはプロジェクトやターゲットのDeployment Targetとは別に、各ファイルごとに個別にDeployment Targetを設定することができます。 例えば、iOS 8以上にしか存在しないUIVisualEffectViewや、iOS 9以降でしか使えないUIStackViewをStoryBoardで配置して、プロジェクトのDeployment Targetを7.0(や8.0)にすると、下記のエラーでビルドに失敗します。 Main.storyboard: error: Class Unavailable: UIVisualEffectView prior to iOS 8.0 これを避けるためにはStoryBoardを使うことをあきらめ、コードでOSバージョンを分岐して、コードでUIコンポーネントを配置する必要があると思

    StoryBoardまたはXIBについて、ファイルごとにDeployment Targetを設定する - 24/7 twenty-four seven
    koogawa
    koogawa 2015/08/17
  • WebとiOSアプリでパスワードを共有する - 24/7 twenty-four seven

    iOS 8からWebサービスとアプリ間でiCloudキーチェーンを通じてパスワードなどアカウント情報を共有できるようになりました。 (ただし、現状ではiCloudキーチェーンを使えるのはSafariのみのため、MacのSafariとiOSアプリの間に限る) 昨今ではそれぞれ別のサービスで同じパスワードを再利用せず、サービスごとに固有のできればランダムなパスワードを登録して、パスワードマネージャで管理することが推奨されています。 Webサービスを使うだけならブラウザのパスワード管理などを利用すればいいのですが、そのサービスのiOSアプリを利用しようとするとパスワードを調べるのが大変でした。 iOS 8では(Safari限定ではありますが)Webサービスで入力してキーチェーンに保存したアカウント情報を、iOSアプリでも利用することができます。 パスワードなど機密性の高い情報を共有するため、どの

    WebとiOSアプリでパスワードを共有する - 24/7 twenty-four seven
    koogawa
    koogawa 2015/03/12
  • Swiftで使いやすいAPIを書くために気をつけていること - 24/7 twenty-four seven

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

  • ダウンロードした画像をキャッシュするクラスの設計と実装について - 24/7 twenty-four seven

    iOS組み込みのキャッシュモジュールNSCacheについて発表しました - ninjinkun's diary @k_katsumi キャッシュを分ける方のはわかりやすくて良いですね。後から読む人の参考になりそうなので、URL と URL の発言、ブログに引用させていただいても良いでしょうか。 2012-03-26 16:42:44 via web to @k_katsumi @ninjinkun はい。ぜひぜひー。せっかくなので便乗して僕がいつも使ってる画像キャッシュのコードを共有したりしてみます。 2012-03-26 16:45:05 via YoruFukurou to @ninjinkun @k_katsumi お、それは楽しみです!この手のものはみんな独自に作ってる感じだと思うので、参考にさせていただきたいですー。 2012-03-26 16:48:23 via web to

    koogawa
    koogawa 2015/02/08
  • 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
  • コマンドラインからiOSアプリケーションをiTunes Connectにアップロードする - 24/7 twenty-four seven

    参考 Testflight build notes via iTMSTransporter [self reloadData];: Automatic app creation and binary upload Command upload App/Ipa to the iTunes Connect App Store Redesign of itunes connect · Issue #38 · kovpas/itc.cli · GitHub TL;DR Xcode(厳密にはApplication Loader)に付属するiTMSTransporterまたはaltoolを使います。 上記のリンク先を見ればだいたいわかります。 altoolのほうが直感的なコマンドで簡単です。 iTMSTransporterはそもそもゲームのアイテムなど大量のIn-App Purchaseのメタデータを

    コマンドラインからiOSアプリケーションをiTunes Connectにアップロードする - 24/7 twenty-four seven
    koogawa
    koogawa 2014/11/02
  • 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
    koogawa
    koogawa 2014/10/23
  • 親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました - 24/7 twenty-four seven

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

    親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました - 24/7 twenty-four seven
    koogawa
    koogawa 2014/09/25
  • iOS 8のすべてのエクステンションはオプトイン方式 - 24/7 twenty-four seven

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

    iOS 8のすべてのエクステンションはオプトイン方式 - 24/7 twenty-four seven
    koogawa
    koogawa 2014/09/19
  • 通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven

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

    通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven
    koogawa
    koogawa 2014/09/18
    確かに土地の争奪戦になりそう。今後どんな展開になるのか楽しみですね
  • 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
    koogawa
    koogawa 2014/09/01