ObjecTips

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

async/await への自動変換

System Framework以外でも自動変換が行われるケースに遭遇したけど自動変換されるものとされないものの違いが分からなかったので調査。 Xcode 13 Release Notes には以下のように記載がある。 https://developer.apple.com/documentation/xcode-release-note…

Task.init と Task.detached の書き方バリエーション

以下5つは同じ Task { } Task.init { } Task.init() { } // deprecated async { } // deprecated async() { } 以下6つは同じ Task.detached { } Task.detached() { } // deprecated Task.runDetached { } // deprecated Task.runDetached() { } // deprecate…

Swift の関数の override で引数のデフォルト値を変更すると何が起こるか

Xcode engineer の人がこんなツイートをしていた Overriding functions with default arguments is fun in Swift! Guess what this prints. pic.twitter.com/CBtZ6am6R9— Louis D'hauwe (@LouisDhauwe) 2021年7月13日 早速 Playground で確認 まずクラスとメ…

SwiftUI でアプリ全体のアクセントカラーを指定する Accent color for the entire SwiftUI app

新規アプリで Xcode のテンプレートからプロジェクトを作成すると Assets.xcassets に AccentColor という名称のカラーアセットが用意されている。これに色を設定するとアプリ全体の AccentColor として反映される。 import SwiftUI struct ContentView: Vie…

Swift での範囲内の数値の判定バリエーション

Comparison operator + logical AND operator 他の言語と同じ < > <= >= && を使うパターン 条件 比較演算子+論理和演算子 0以上1以下 if 0.0 <= value && value <= 1.0 0以上1未満 if 0.0 <= value && value < 1.0 0超え1以下 if 0.0 < value && value <= 1…

UIAction と UIControlEvent

少し調査部分が長くなってしまったのでざっと読みたい人は「まとめ」の段をどうぞ UIButton でメソッドの実行を設定するには親クラスの UIControl で定義されている以下のメソッドを使用する。 func addTarget(_ target: Any?, action: Selector, for contro…

Xcode 12 の SwiftUI + Core Data のプロジェクトテンプレートが不完全

新規プロジェクト作成でプロジェクトテンプレートから iOS App を選択 Interface SwiftUI, Life Cycle SwiftUI App, Language Swift を選択して Use Core Data をチェック 作成される初期画面 ContentView の body とビルド結果は以下 var body: some View {…

Swift String の合成文字の Equatable 判定

String でひらがなの「が」と「か」+「濁点」は等価か? の実験メモ The test for Equatable of precomposed characters … という事で答えは true 厳密な区別が必要ない場合はカジュアルに等価比較して良さそう。

Xcode 11 で iOS 14 Simulator を使用する

Xcode 12 への移行はまだ先の予定だけど取り敢えず iOS 14 で動作確認・修正作業をしたいなんてケースがある。 そこでタイトルの「Xcode 11 で iOS 14 Simulator を使用する」これができるらしい。 stackoverflow.com 手順 Xcode 12 付属の iOS Simulator を…

Vision framework VNRecognizeTextRequest でのテキスト認識(OCR)の対応言語 iOS 13, iOS 14

iOS 13でOCRに使えるテキスト認識のAPIが登場。 使えるRevisionは1。iOS 14でRevision 2が登場した。 @available(iOS 13.0, *) public let VNRecognizeTextRequestRevision1: Int @available(iOS 14.0, *) public let VNRecognizeTextRequestRevision2: Int …

ヒラギノフォントが切れる問題 SwiftUI編

検証環境 Xcode 11.4.1 iOS+ヒラギノ+UILabel とか UIButton でググると過去の UIKit での問題が参照できます。 この問題は SwiftUI でも発生します。 まずサンプルとしてヒラギノ角ゴのW3を指定して Text を作成。 (デバッグのため青色の枠線も表示) Japa…

既存プロジェクトで SwiftUI のプレビュー機能を使う Using SwiftUI preview in existing project

WWDC 2019 Session 233 Mastering Xcode Previews https://developer.apple.com/videos/play/wwdc2019/233/ を見ていて、あれ、これもしかして Deployement Targe iOS 13以降のプロジェクトじゃなくても SwiftUI のプレビュー表示は使えるんじゃない?と思っ…

UIGraphicsBeginImageContextWithOptions をやめて UIGraphicsImageRenderer を使うメリット

WWDCのメモリのセッションを見ていたら思わぬTipsについて言及されていた。 WWDC 2018 iOS Memory Deep Dive の20分57秒あたり https://developer.apple.com/videos/play/wwdc2018/416 UIGraphicsBeginImageContextWithOptions を使うのはやめて UIGraphicsI…

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: UISt…

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つの解決の例として…