ObjecTips

基本Objective-Cで iOS とか OS X とか

Tips

iOS 11 での UIImagePickerController の変更点

iOS 10 までは UIImagePickerController と UIImagePickerControllerSourceTypePhotoLibrary の組み合わせでフォトライブラリを表示する際にアクセス権限の確認を自動で行ってくれていた。 アクセス権限がなければ鍵マークが表示され一切の情報を取得する事…

Core Dataのデータベースの保存場所を切り替える

保存場所を固定的に変更する方法は前回の記事を参照 koze.hatenablog.jp 今回の保存場所の切り替えというのは既に使用している A.sqlite ファイルから別の B.sqlite を使用するようにしたりまた A.sqlite に戻したりするという意味での動的な切り替え。 利用…

NSPersistentStoreDescription のデフォルト値とカスタマイズ

iOS 10で導入された NSPersistentContainer を使うとCore Dataのセットアップのコードがずいぶん短くなる。Xcode のテンプレートはこんな感じ - (NSPersistentContainer *)persistentContainer { @synchronized (self) { if (_persistentContainer == nil) {…

Xcode 9 で無線で開発 Wireless Debugging

WWDC 2017 にて Xcode 9 ではUSB接続無しで無線で繋いで開発出来るって話が出ていたけど、何の気なしに Xcode 9 を起動しても同じLAN内の iPhone がビルドターゲットに出てこないので調べてみたらすぐにやり方が分かった。 WWDC 2017 Session 404 の6分20秒…

PDFView の表示設定まとめ

関連記事 koze.hatenablog.jp ※ iOS 11 beta 時点での検証です 検証コード - (void)viewDidLoad { [super viewDidLoad]; PDFView *view = [[PDFView alloc] initWithFrame:self.view.bounds]; view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UI…

Vision Framework で水平角検出(傾き) Horizon Detection

iOS 11 関連記事 iOS 11 UIKit の変更点 - ObjecTips iOS 11 Foundation の変更点 - ObjecTips iOS 11 Messages Framework の変更点 - ObjecTips iOS 11 PDFKit - ObjecTips iOS 11 Core Image の変更点 - ObjecTips koze.hatenablog.jp Horizon Detection V…

iOS 11 Core Image の変更点

iOS 11 関連記事 iOS 11 UIKit の変更点 - ObjecTips iOS 11 Foundation の変更点 - ObjecTips iOS 11 Messages Framework の変更点 - ObjecTips iOS 11 PDFKit - ObjecTips Vision framework でテキスト検出 TextDetection - ObjecTips Vision Framework で…

iOS 11 PDFKit

iOS 11 関連記事 iOS 11 UIKit の変更点 - ObjecTips iOS 11 Foundation の変更点 - ObjecTips iOS 11 Messages Framework の変更点 - ObjecTips iOS 11 Core Image の変更点 - ObjecTips Vision Framework でテキスト検出 Text Detection - ObjecTips Visio…

iOS 11 Messages Framework の変更点

iOS 11 関連記事 iOS 11 UIKit の変更点 - ObjecTips iOS 11 Foundation の変更点 - ObjecTips iOS 11 PDFKit - ObjecTips iOS 11 Core Image の変更点 - ObjecTips Vision framework でテキスト検出 TextDetection - ObjecTips Vision Framework で水平角検…

Vision Framework でテキスト検出 Text Detection

iOS 11 関連記事 iOS 11 UIKit の変更点 - ObjecTips iOS 11 Foundation の変更点 - ObjecTips iOS 11 Messages Framework の変更点 - ObjecTips iOS 11 PDFKit - ObjecTips iOS 11 Core Image の変更点 - ObjecTips koze.hatenablog.jp Vision Framework iO…

App Storeでレビューする機能を実装する

iOS 10.3から登場する SKStoreReviewController のドキュメントにApp Storeのレビュー画面を直接開く方法がしれっと記載されている。 https://developer.apple.com/reference/storekit/skstorereviewcontroller/2851536-requestreview アプリのURLのクエリに…

UIImageView の画像をフェードインアウトさせて変更する

UIImageView に画像を設定する際にフワッとフェード(ディゾルブ)するようにするには、CALayer に CATransition のアニメーションを加えてやる コードは以下 UIImageView *imageView = self.imageView; imageView.image = image; // 画像を変更 [imageView.…

CATiledLayer のフェードインエフェクトを解除する

CATiledLayer は表示時にデフォルトでフェードインエフェクトがかかるが CATiledLayer のサブクラスを作って以下のクラスメソッドをオーバーライドして 0 秒を返してやる事でフェードインしないようにする事が出来る。 + (CFTimeInterval)fadeDuration; 実装…

カメラで撮影した写真と動画を Photos.framework でライブラリに保存する

撮影は UIImagePickerController にお任せして撮影後のデータを Photos で保存する実装方法。 まず UIImagePickerController に sourceType でカメラ撮影を指定。 デフォルトのままだと写真撮影しかできないので、カメラ撮影で利用可能な形式を全て設定して…

Xcode プロジェクトの watchOS 1 から watchOS 2 への移行

watchOS 1 から watchOS 2 への移行は、Xcode のプロジェクトを選択して Editor > Validate Settings... を選択して Xcode にお任せてプロジェクト更新するのが良い。 でもなぜかこの時に watchOS の移行についての項目が出てこなくてプロジェクトがうまくア…

自作の iOS Framework を watchOS に対応させる

自作Farmework内で watchOS で利用できないAPIを使っていると not available on watchOS のエラーが出て watchOS 向けにビルドできない。 Apple純正の Framework と同じようにヘッダのメソッド定義に __WATCHOS_PROHIBITED を付けて watchOS では使えません…

NSString の真偽値の判定

NSString で表される文字列の真偽値を判定するには boolValue メソッドが使える。 @property (readonly) BOOL boolValue NS_AVAILABLE(10_5, 2_0); 数字、YES/NO、true/false などの文字列を boolValue メソッドで判定できる NSLog(@"%d", @"1".boolValue); …

Touch IDのエラーまとめ

LAContext の以下のAPI - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * __nullable error))reply; このAPIで指紋認証の LAPolicyDeviceOwnerAuthenticationWithBiometrics …

ターミナルでUUIDを生成する

iOS, macOS でプログラム内でUUIDを使う場合 CFUUID か NSUUID が使える。 プログラム外で識別子としてUUIDが欲しい時は uuidgen というコマンドが用意されているのでこれを使う。 ターミナルで $uuidgen 結果は以下のように生成されたUUIDが表示される 14B7…

Google Firebase で既存の AdMob アカウントを使う

新たに作成したFirebaseアカウント(GoogleアカウントA)で今まで使っていた既存のAdMobアカウント(別のGoogleアカウントB)を引き続き使いたいというパターンの手順。 *1 *2 GoogleアカウントAでFirebaseにログイン 新規プロジェクトを作成 歯車アイコンか…

Google Firebase で Crash Reporting を使う

まず初めに 後からこの issue で分かった事だけど https://github.com/firebase/quickstart-ios/issues/13 Google Cloud Platform の利用規約に同意しておかないと下の手順の dSYM アップロード用のアカウントの作成やその権限付与でサーバエラーが起きて進…

Bitcode対応のアプリでクラッシュレポートを使う際の注意

アプリをBitcode対応してリリースしたら Crashlytics でクラッシュレポートが表示されなくなってしまった。 ダッシュボードには dSYMs が見当たらないとのメッセージが。 Found 1 unsymbolicated crash from missing dSYMs in 1 version in the last 24 hour…

Atom のデフォルト syntax を変更する

GitHub製のエディタAtomでplistを開くとデフォルトでは Property List (Old-Style) として開かれるが、今時のplistファイルはOld-Style形式ではなくXML形式なので syntax error になってしまう。 メニューの Edit>Select Grammar かウィンドウ右下のフォーマ…

watchOS 1からwatchOS 2への置き換え例

watchOSとiOSでデータのやり取りをしている場合のwatchOS 1からwatchOS 2への置き換え例 watchOS watchOS 1 [WKInterfaceController openParentApplication:userInfo reply:^(NSDictionary *replyInfo, NSError *error) { if (error) { } else { } }]; watch…

Playground で delegate を使う

Playground で delegate メソッドを扱うにはどうする? delegate が呼ばれるクラスの実装が必要、Playground でクラス定義できるの? というあたりが疑問だったけど Playground でも普通にクラス定義が可能で delegate も試せるらしい。 下記の前回のコード…

Playground でオーディオ再生(音声読みあげ)をする

Playground を使って簡単なオーディオ再生のテストを行う。 スニペットを実行確認するのにいちいちダミーのアプリを作ったりしなくていいのが Playground の便利なところ。 Playground なので言語は Swift まずババッと以下のコードを書いてみる。 オーディ…

中国語のローカライズ表記

iOS の言語設定の言語一覧画面と同じような画面を作ろうと思って実装してみたら中国語の場合に思い通りにいかなかったメモ iOS の言語設定の言語一覧画面 cell.textLabel.title には現地語でのローカライズ表記 cell.detailTextLabel.title にはシステム言語…

XLIFF ファイルを使ってローカライズ

現在一番新しいローカライズの方法が XLIFF を使ったプロジェクト全体のローカライズになる。 この方法は Base Internationalization 方式でのローカライズを想定している。 Xcode のプロジェクトナビゲーターでプロジェクトを選択した状態でメニューから Ed…

ibtool を使って incremental にローカライズ

前回 今回は前回の ibtool を使ったローカライズの話の続き ibtool には incremental localization という機能がある。 コマンドの形式 ibtool --previous-file <old_file> --incremental-file <old_translated_file> --localize-incremental --write <new_translated_file> <current_modified_file> --previous-file <old_file> には翻訳元の古いフ</old_file></current_modified_file></new_translated_file></old_translated_file></old_file>…

ibtool を使ってローカライズ

サンプルに使用する Main.storyboard ファイルは ViewController の上に1つ UILabel が載っているだけの状態 storyboard ファイルの中身のXMLは以下