ObjecTips

Swift & Objective-C で iOS とか macOS とか

AVSpeechSynthesizer の delegate メソッド willSpeakRangeOfSpeechString でクラッシュする危険性

AVSpeechSynthesizer の delegate メソッド speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:) は音声読み上げの際にこれから読み上げる箇所を NSRange で知らせてくれる。 このメソッドを使って読み上げテキスト全体のうち今どこが読まれてい…

Xcode 11.2 + Storyboard UITextView でクラッシュ

Xcode 11.2 で Storyboard か xib で UITextView を使っていると iOS 13.2 より前のバージョンでクラッシュするという凶悪なバグが発生している。 実際にクラッシュを起こしてみると以下の様に _UITextLayoutView ってクラスは無いとエラーメッセージが表示…

複数の AVSpeechSynthesizer の同時再生 iOS 13

最近 iOS 13 でバグも含め挙動が変わった点で色々と苦労している。そんな中良い改善点もあった。タイトルの複数の AVSpeechSynthesizer の同時再生がその1つ。 これまでは AVSpeechSynthesizer の同時再生はできなかった。できないと一口に言っても妙な挙動…

iOS 13 で AVSpeechSynthesisVoice.currentLanguageCode() の挙動が変更に(多分バグ)

Xcode 11, iOS 12.2, iOS 13.1, iOS 13.1.3 で動作確認 デフォルトの読み上げ音声の言語の確認 AVSpeechSynthesisVoice.currentLanguageCode() 参考に読み上げ確認の実装 (AVSpeechSynthesisVoice を設定せずデフォルト状態での読み上げ) let synthesize =…

iOS 13 で EventKitUI に追加された UIFont のカテゴリメソッド(多分Private用)

タイトルの通り iOS 13 で EventKitUI に UIFont のカテゴリメソッドが追加された。 @property(nonatomic, readonly, class) UIFont *ek_defaultOccurrenceSecondaryTextFont; + (UIFont *)ek_defaultOccurrencePrimaryTextFontForSizeClass:(UIUserInterfac…

prepareForSegue での segue の identifier による分岐を Swift enum で管理する

まず初めに以下の様なString型の enum を用意する。 enum SegueIdentifier: String { case a case b } Swift 5 以前 UIViewController の prepareForSegue メソッド内で segue.identifier から enum SegueIdentifier の作成を行う。 segue.identifier の型は…

iOS 13 で UIView の beginAnimations 等のアニメーション関連のメソッドが deprecated

タイトルの通り、iOS 13 で以下のメソッドが depecated になった。 UIView - UIKit | Apple Developer Documentation Animating Views class func beginAnimations(String?, context: UnsafeMutableRawPointer?) class func commitAnimations() class func s…

iOS 13 beta 3 で追加された Core Image API

前回までの変更点 koze.hatenablog.jp 今回は iOS 13 beta 3 で変更点をチェック。 追加フィルタは1つで、他若干の追加APIが見られた。 https://gist.github.com/Koze/86315376f00fa44662f0d841f046e5d2/revisions iOS 13 beta 3 CIRoundedRectangleGenerato…

iOS 13 で追加された Core Image の CIFilter

iOS 13 で何か追加の CIFilter はあったかな?と思って diff を取ってみたら面白かった。 使った出力はワンライナーでこれ CIFilter.filterNames(inCategory: nil).forEach{print($0)} CIFilter Changes iOS 12 - iOS 13 https://gist.github.com/86315376f0…

iOS 13 WebKit の変更点

WKWebpagePreferences WKWebpagePreferences クラスが追加された。 既存では WKPreferences というクラスが WKWebView 全体の設定クラスとして用意されている。 新たに追加された WKWebpagePreferences は基本的にはページ単位での設定クラスになる。 どうい…

iOS 13 Core Graphics で Tagged PDF の書き出しをサポート

CGPDF 周りの新APIを発見 func CGPDFContextBeginTag(_ context: CGContext, _ tagType: CGPDFTagType, _ tagProperties: CFDictionary) CGPDFContextBeginTag(_:_:_:) - Core Graphics | Apple Developer Documentation func CGPDFContextEndTag(_ context:…

macOS 10.15 AppKit の変更点

AppKit で気になった追加API NSScreen var localizedName: String { get } localizedName - NSScreen | Apple Developer Documentation これまではスクリーン(macOS ではディスプレイ)に関する情報の取得は CGDisplay 系のAPIで取得していた気がする。 も…

Xcode 11 Core Data の変更点

こっちの記事の派生で Core Data の更新箇所だけ切り出し koze.hatenablog.jp Core Data Default Value オプション Core Data のモデルの String attribute で Default Value の項目が空の場合に Null String を使うか Empty String "" を使うかのチェックボ…

Xcode 11 の変更点

気になるところだけざっくり Xcode 11 Beta Release Notes | Apple Developer Documentation New Features SwiftUI(書くまでもなく) Application Loader が Xcode に同梱されなくなった Asset Catalog Asset Catalog でキーボードショートカットでのコピペ…

IBSegueAction の使い方

Xcode 11から IBSegueAction が追加された。利用可能なOSは iOS 13, macOS 10.15以降 既存実装 Segue で接続し呼び出す ViewController への必須パラメータ渡しの点でメリットがある。 prepare(for:sender:) だと func prepare(for segue: UIStoryboardSegue…

iOS 10 + UIDocumentPickerViewController でクラッシュ

クラッシュ時のコンソールログは以下 *** Assertion failure in -[UIDocumentPickerViewController _commonInitWithCompletion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIDocumentPickerViewController.m:91 *** Termin…

This app could not be installed at this time. のエラー対応

Xcode + iOS Simulator ででたまに遭遇するアプリが起動しない以下のエラー。 This app could not be installed at this time. クリーンビルドするとか Xcode や Mac を再起動するなどいくつか紹介されているけど他の方法も見つけたので1つの解決の例として…

縦書き対応した iWorks アプリの新レイアウトエンジン

縦書き対応した iWorks についてMacお宝鑑定団にて http://www.macotakara.jp/blog/category-60/entry-37209.html 今回の縦書き表示は、Core Textではなく、iWorks専用レイアウトエンジンが搭載されていて、 との事で気になったので調べてみる。 otool -L /A…

CaseIterable を使って case の index を取得する

前段 CaseIterable を使って case の index を取得する Extension にする ソースファイル 前段 Swift 4.2 の CaseIterable の allCaeses を使って enum の case の一覧や個数が取得可能になり随分便利になった。 表題の enum の index の取得について、まず …

Swift の enum の型の明記とビルド速度

調査の動機 Swift って結構省略して書けるけどその分 Xcode が脳内補完するからビルドが遅くなるんじゃないの? だったら省略表記無しでコードが長くなってもビルド速度が早い方がいい。 エビデンスが無いので一応確認してみよう。 ビルド環境 ビルド環境 本…

Swift + Core Data Code Generation で Objective-C からの呼び出しでクラッシュするケース

部分的に Swift で書き直しているプロジェクトで起きたケース。 .xcdatamodeld のエンティティ設定で Core Data の Code Generation を Objective-C から Swift に変更した後 Objective-C からの呼び出しでクラッシュ まず Objective-C と Swift の Core Dat…

Core Data Code Generation の Objective-C と Swift の違い

環境 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 の注意点1

App Transfer の手順については以下 koze.hatenablog.jp 譲渡作業で確認できた注意点 ダウンロード等のレポート情報が見られなくなる アプリの譲渡を行うと譲渡側の App Store Connect からアプリ自体が削除されてしまい、これまでのダウンロード数などのレ…

アプリの譲渡 App Transfer の手順

App Transfer の概要 App Transfer は App Store でのアプリの譲渡機能で、レビューを維持したまま他の Developer アカウントへアプリを移管する事が出来る。ユーザはアプリを別途ダウンロードする必要はなく同一のアプリとしてアップデートを行う事が出来る…

NSUserDefaults に時・分のみ記録する(日付は不要なケース)

日付は不要で時・分のみを NSUserDefaults に保存したい場合、パッと以下の様な方法が思い付く 時・分を2つに分けて2つの NSNumber で保存する 時・分を分換算して1つの NSNumber で保存する NSDate で保存して時・分のみを利用する 他には以下も考えられる …

Objective-C と Swift の App Store 配布時のファイルサイズの違い

概要 元々 Objective-C のみで作られたアプリでライブラリに Firebase と自前の Objective-C Framework を複数含む。 これに Swift クラスを3つ(3ファイル)追加しアーカイブしたものを iTunes Connect にアップロードして「App Store ファイルのサイズ」か…

等幅フォントのリスト iOS monospace font

iOS で使える等幅フォントどれだっけな?てのをたまに知りたくなる。 検索しても引っかからないなーと思ったら gist に放り込んだまま(4年も前に!)でブログに書いてなかった模様。てことで記事化しておく。 iOS UIKit, macOS AppKit, どちらでも利用可能…

DebugLog を応用した DebugBlock

DebugLog 良く見かける技で、デバッグビルド時のみ出力されるログを以下の様に定義出来る。 #if DEBUG #define DebugLog(...) NSLog(__VA_ARGS__) #else #define DebugLog(...) #endif Before #if DEBUG NSLog(@"debug message"); #endif After DebugLog(@"d…

画像のExifデータの取得方法と取得データの比較 iOS

検証環境 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…