Tips
WWDC 2019 Session 233 Mastering Xcode Previews https://developer.apple.com/videos/play/wwdc2019/233/ を見ていて、あれ、これもしかして Deployement Targe iOS 13以降のプロジェクトじゃなくても SwiftUI のプレビュー表示は使えるんじゃない?と思っ…
WWDCのメモリのセッションを見ていたら思わぬTipsについて言及されていた。 WWDC 2018 iOS Memory Deep Dive の20分57秒あたり https://developer.apple.com/videos/play/wwdc2018/416 UIGraphicsBeginImageContextWithOptions を使うのはやめて UIGraphicsI…
AVSpeechSynthesizer の delegate メソッド speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:) は音声読み上げの際にこれから読み上げる箇所を NSRange で知らせてくれる。 このメソッドを使って読み上げテキスト全体のうち今どこが読まれてい…
Xcode 11.2 で Storyboard か xib で UITextView を使っていると iOS 13.2 より前のバージョンでクラッシュするという凶悪なバグが発生している。 実際にクラッシュを起こしてみると以下の様に _UITextLayoutView ってクラスは無いとエラーメッセージが表示…
最近 iOS 13 でバグも含め挙動が変わった点で色々と苦労している。そんな中良い改善点もあった。タイトルの複数の AVSpeechSynthesizer の同時再生がその1つ。 これまでは AVSpeechSynthesizer の同時再生はできなかった。できないと一口に言っても妙な挙動…
Xcode 11, iOS 12.2, iOS 13.1, iOS 13.1.3 で動作確認 デフォルトの読み上げ音声の言語の確認 AVSpeechSynthesisVoice.currentLanguageCode() 参考に読み上げ確認の実装 (AVSpeechSynthesisVoice を設定せずデフォルト状態での読み上げ) let synthesize =…
タイトルの通り iOS 13 で EventKitUI に UIFont のカテゴリメソッドが追加された。 @property(nonatomic, readonly, class) UIFont *ek_defaultOccurrenceSecondaryTextFont; + (UIFont *)ek_defaultOccurrencePrimaryTextFontForSizeClass:(UIUserInterfac…
まず初めに以下の様なString型の enum を用意する。 enum SegueIdentifier: String { case a case b } Swift 5 以前 UIViewController の prepareForSegue メソッド内で segue.identifier から enum SegueIdentifier の作成を行う。 segue.identifier の型は…
タイトルの通り、iOS 13 で以下のメソッドが depecated になった。 UIView - UIKit | Apple Developer Documentation Animating Views class func beginAnimations(String?, context: UnsafeMutableRawPointer?) class func commitAnimations() class func s…
前回までの変更点 koze.hatenablog.jp 今回は iOS 13 beta 3 で変更点をチェック。 追加フィルタは1つで、他若干の追加APIが見られた。 https://gist.github.com/Koze/86315376f00fa44662f0d841f046e5d2/revisions iOS 13 beta 3 CIRoundedRectangleGenerato…
iOS 13 で何か追加の CIFilter はあったかな?と思って diff を取ってみたら面白かった。 使った出力はワンライナーでこれ CIFilter.filterNames(inCategory: nil).forEach{print($0)} CIFilter Changes iOS 12 - iOS 13 https://gist.github.com/86315376f0…
Xcode 11から IBSegueAction が追加された。利用可能なOSは iOS 13, macOS 10.15以降 この新機能は Segue で接続し呼び出す ViewController への必須パラメータ渡しの点でメリットがある。 既存実装 prepare(for:sender:) だと func prepare(for segue: UISt…
クラッシュ時のコンソールログは以下 *** Assertion failure in -[UIDocumentPickerViewController _commonInitWithCompletion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIDocumentPickerViewController.m:91 *** Termin…
Xcode + iOS Simulator ででたまに遭遇するアプリが起動しない以下のエラー。 This app could not be installed at this time. クリーンビルドするとか Xcode や Mac を再起動するなどいくつか紹介されているけど他の方法も見つけたので1つの解決の例として…
前段 CaseIterable を使って case の index を取得する Extension にする ソースファイル 前段 Swift 4.2 の CaseIterable の allCaeses を使って enum の case の一覧や個数が取得可能になり随分便利になった。 表題の enum の index の取得について、まず …
調査の動機 Swift って結構省略して書けるけどその分 Xcode が脳内補完するからビルドが遅くなるんじゃないの? だったら省略表記無しでコードが長くなってもビルド速度が早い方がいい。 エビデンスが無いので一応確認してみよう。 ビルド環境 ビルド環境 本…
部分的に Swift で書き直しているプロジェクトで起きたケース。 .xcdatamodeld のエンティティ設定で Core Data の Code Generation を Objective-C から Swift に変更した後 Objective-C からの呼び出しでクラッシュ まず Objective-C と Swift の Core Dat…
環境 Xcode 10.0 Core Data Code Generation Code Generation は Xcode が Core Data のモデルクラスの基本実装を自動で行ってくれる機能で <ProductName>.build/Debug-iphonesimulator/<ProductName>.build/DerivedSources/CoreDataGenerated/<FileName> の中にファイルが自動で生成される。 Fil</filename></productname></productname>…
App Transfer の手順については以下 koze.hatenablog.jp 譲渡作業で確認できた注意点 ダウンロード等のレポート情報が見られなくなる アプリの譲渡を行うと譲渡側の App Store Connect からアプリ自体が削除されてしまい、これまでのダウンロード数などのレ…
App Transfer の概要 App Transfer は App Store でのアプリの譲渡機能で、レビューを維持したまま他の Developer アカウントへアプリを移管する事が出来る。ユーザはアプリを別途ダウンロードする必要はなく同一のアプリとしてアップデートを行う事が出来る…
日付は不要で時・分のみを NSUserDefaults に保存したい場合、パッと以下の様な方法が思い付く 時・分を2つに分けて2つの NSNumber で保存する 時・分を分換算して1つの NSNumber で保存する NSDate で保存して時・分のみを利用する 他には以下も考えられる …
概要 元々 Objective-C のみで作られたアプリでライブラリに Firebase と自前の Objective-C Framework を複数含む。 これに Swift クラスを3つ(3ファイル)追加しアーカイブしたものを iTunes Connect にアップロードして「App Store ファイルのサイズ」か…
iOS で使える等幅フォントどれだっけな?てのをたまに知りたくなる。 検索しても引っかからないなーと思ったら gist に放り込んだまま(4年も前に!)でブログに書いてなかった模様。てことで記事化しておく。 iOS UIKit, macOS AppKit, どちらでも利用可能…
DebugLog 良く見かける技で、デバッグビルド時のみ出力されるログを以下の様に定義出来る。 #if DEBUG #define DebugLog(...) NSLog(__VA_ARGS__) #else #define DebugLog(...) #endif Before #if DEBUG NSLog(@"debug message"); #endif After DebugLog(@"d…
検証環境 Xcode 9.2, iOS 11.2 Simulator iOS 11.1 iPhone X の背面カメラで撮影したものを AirDrop で Mac に送ってシミュレータ経由で iCloud Photo Library に取り込んだ写真を用いてデータを確認 Exifの取得 まず取得方法をざっくり Exif等のデータをプ…
NSString の比較メソッド一覧 - (NSComparisonResult)compare:(NSString *)string; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareO…
UIActivityViewController からメールが呼びだされた時に statusBarStyle が常に UIStatusBarStyleDefault で黒文字になってしまう。通常は問題無いがアプリのデザインでナビゲーションバーやボタン類に色を付けている場合、ステータスバーの文字色とマッチ…
iOS 10 までは UIImagePickerController と UIImagePickerControllerSourceTypePhotoLibrary の組み合わせでフォトライブラリを表示する際にアクセス権限の確認を自動で行ってくれていた。 アクセス権限がなければ鍵マークが表示され一切の情報を取得する事…
保存場所を固定的に変更する方法は前回の記事を参照 koze.hatenablog.jp 今回の保存場所の切り替えというのは既に使用している A.sqlite ファイルから別の B.sqlite を使用するようにしたりまた A.sqlite に戻したりするという意味での動的な切り替え。 利用…
iOS 10で導入された NSPersistentContainer を使うとCore Dataのセットアップのコードがずいぶん短くなる。Xcode のテンプレートはこんな感じ - (NSPersistentContainer *)persistentContainer { @synchronized (self) { if (_persistentContainer == nil) {…