タグ

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

  • iOS 13にしかないフレームワークを使用したアプリをiOS 12以下でも動くようにするには - 24/7 twenty-four seven

    SwiftUI、Combile、RealityKitなどiOS 13以上の環境にしか存在しないフレームワークを使用するアプリをiOS 12以下の環境で実行すると、その機能を実際に呼び出さないようにしていたとしても、起動時にダイナミックリンクに失敗してクラッシュしてしまいます。 dyld: Library not loaded: /System/Library/Frameworks/RealityKit.framework/RealityKit Referenced from: /Users/katsumi/Library/Developer/CoreSimulator/Devices/7D73BD02-5C30-4723-9023-4D19BCDAE1AA/data/Containers/Bundle/Application/A9E00179-1DDD-4051-9207-7CC6C9DC

    iOS 13にしかないフレームワークを使用したアプリをiOS 12以下でも動くようにするには - 24/7 twenty-four seven
    Nyoho
    Nyoho 2019/06/18
  • SceneKitとCALayerで作る3Dのスライドショー - 24/7 twenty-four seven

    大型ディスプレイに投影するデジタルサイネージを作る仕事をしました。 できあがったのがこれです。 github.com まず、アートディレクターと相談して、下記の映像を参考にして3D空間を飛び回るようなスライドショーでいこうと決めました。 www.youtube.com www.youtube.com 最初のプロトタイプはCALayerだけで作りました。 CALayerは3Dの変形をサポートしていて、かつmacOSのCALayerではCore Imageのフィルタがエフェクトに使えるので、各層のレイヤーに次のように書くだけで遠くなるにつれてブラーをかけてぼやかせる、ということが簡単に実現できます。 let frontLayer = CALayer() frontLayer.frame = layerFrame if let filter = CIFilter(name: "CIGaussia

    SceneKitとCALayerで作る3Dのスライドショー - 24/7 twenty-four seven
    Nyoho
    Nyoho 2019/04/16
  • CのライブラリをiOS向けにビルドする - 24/7 twenty-four seven

    ほとんどのUNIX系OSにおけるCライブラリはAutotoolsを使って開発されています(./configure && make installの手順でビルドする)。 普通に./configure && make installすると実行している環境(MacLinux)用のバイナリが生成されますので、そのままではiOSで利用できません。 iOSで使用できるようにするにはiOS環境用にビルド、いわゆるクロスコンパイルする必要があります。 Autotools(./configure)ではクロスコンパイルのことが初めから考慮されていてそのための機能がサポートされているので、./configureの設定を正しくできれば、意外と簡単にさまざまなCのライブラリをiOS上で動くようにビルドできます。 設定について iOSではデバイスとシミュレータでCPUアーキテクチャが異なるのでそれぞれのアーキテクチ

    CのライブラリをiOS向けにビルドする - 24/7 twenty-four seven
    Nyoho
    Nyoho 2018/12/26
  • Auto Layoutの静的な制約で実現するテキストの量によって折りたたみ可能なテキストビュー - 24/7 twenty-four seven

    長いテキストが初期表示では折りたたまれて表示されていて、「つづきを読む」ボタンを押すことで表示エリアが拡大して全文が表示されるという挙動を、できるだけ動的な要素を排除して実現してみます。 サンプルコードは下記のリポジトリで公開しています。 github.com 今回の例ではUIStackViewを活用します。UIStackViewは内部のビューのisHiddenプロパティによってビューのサイズをゼロにできるので、うまく活用すればあたかも複数のレイアウトを切り替えているような挙動を実現できます。 テキストビュー(またはラベル)の左右両端と上端が一致するようにStack Viewに制約を付けます。 さらにテキストビューとStack Viewの高さが一致する制約を付けます。 Stack Viewの中のビューに高さの制約として折りたたんだときのサイズを指定します。例では200ptです。 テキストの

    Auto Layoutの静的な制約で実現するテキストの量によって折りたたみ可能なテキストビュー - 24/7 twenty-four seven
    Nyoho
    Nyoho 2018/11/07
    おお素晴らしい。isHiddenにCocoaバインディングして自動的に見せ方を変えるのはMacでは出来た。iOSでやったことなかった。
  • iOSDCでテストしづらいコードをテストしやすくするための方法について話しました - 24/7 twenty-four seven

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

    iOSDCでテストしづらいコードをテストしやすくするための方法について話しました - 24/7 twenty-four seven
  • 懇親会における英会話のプロトコル - 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
  • 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
    Nyoho
    Nyoho 2015/12/02
  • 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
    Nyoho
    Nyoho 2015/03/12
    Shared Web Credential便利だな
  • Swiftで使いやすいAPIを書くために気をつけていること - 24/7 twenty-four seven

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

    Nyoho
    Nyoho 2015/02/20
    実際に書くときの補完を意識してAPI設計、いいなあ。SwiftのライブラリだとXcodeのプロジェクトにPlaygroundを同梱できるのはすごくいいことだなあ
  • 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
    Nyoho
    Nyoho 2015/01/03
  • 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
  • コマンドラインから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
  • 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
  • 親指シフトで日本語入力ができるカスタムキーボード「N+Keyboard」をリリースしました - 24/7 twenty-four seven

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

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

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

    通知センターから今日やるアニメをサッと確認できる「今日のアニメ」をリリースしました - 24/7 twenty-four seven
    Nyoho
    Nyoho 2014/09/18
  • 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
    Nyoho
    Nyoho 2014/07/30
  • Travis CIでipaを作るときのCode Signが失敗するのを修正したメモ - 24/7 twenty-four seven

    一週間ほど前から(おそらくTravis CIの環境がXcode 5.1に変わってから)Travis CI上でipaファイルの作成に失敗するようになってしまって、TestFlightにベータ版を自動的にアップロードすることができなくなっていたのを昨日ようやく直したのでメモ。 ↓ということで以前に書いた記事はちょっと古くなってしまいました。 文はそのままですが、参照先のgistの内容はアップデートしてあります。 ユビレジのiPadアプリのCI環境をJenkinsからTravis CIに移行したときのまとめ - 24/7 twenty-four seven 失敗している箇所のエラーメッセージは下記の通り。ipaを作る前の、プロジェクトのビルドでコード署名をするところで失敗しているけど、これだけだと原因がよくわからないのでまず手元で同様のメッセージが出る状況を再現することを実行しました。 &#8

    Travis CIでipaを作るときのCode Signが失敗するのを修正したメモ - 24/7 twenty-four seven
  • 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
  • NSDateFormatterのパフォーマンスの話 #potatotips - 24/7 twenty-four seven

    クックパッド主催の第4回potatotipsでiOSのtipsとして日付のフォーマットをするときのパフォーマンスの話をしました。 きっかけ きっかけは何気なくgistを眺めていたときに見つけたこれです。 ↓ Compare the date parsing performance of NSDateFormatter against SQLite's date parser for parsing an iOS 8601 date. NSDateFormatter took 108.163 seconds strptime_l took 21.656 seconds sqlite3 took 7.096 seconds そうそう、NSDateFomatterはけっこう遅いからフォーマットが固定だったりロケール関係ないときはstrptime_l使うよね、アップルのドキュメントにも載ってるし…

    NSDateFormatterのパフォーマンスの話 #potatotips - 24/7 twenty-four seven
  • Objective-C や Xcode の新しい機能のほとんどは iOS4 以前でも動く - 24/7 twenty-four seven

    Objective-C Feature Availability Index に一覧表が載ってるのですが、ARCのWeak Reference 以外は iOS 4 以上、ほとんどはすべての iOS バージョンで動くので、古い環境を気にせずにジャンジャン使ってしまってOKです。 新しいリテラルや Subscripting は断然コードが書きやすく読みやすくなるのでこれはうれしいですね。 Objective-C Feature Availability Index FeatureTools versionsOS X deploymentiOS deployment Automatic Reference Counting (ARC)Xcode 4.2 (LLVM Compiler 3.0)Requires modern runtime Deploys back to OS X v10.7Dep

    Objective-C や Xcode の新しい機能のほとんどは iOS4 以前でも動く - 24/7 twenty-four seven