ObjecTips

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

Swift

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 で確認 まずクラスとメ…

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…

Swift String の合成文字の Equatable 判定

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

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 のプレビュー表示は使えるんじゃない?と思っ…

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 の型は…

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

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

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

Playground で delegate を使う

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

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

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

Swift で書かれたアプリを配信すると起動時にクラッシュ

Swfit で書いたアプリを配信すると起動時にクラッシュするケースがある。 Apple の以下のドキュメントで言及されている。 原因は証明書で、iOS 8とSwift 登場以後の証明書には 部署 Organizational Unit (OU) が付与されるようになっていて、これが無い証明…

Swift での NSLocalizedString

Objective-C では NSString *NSLocalizedString(NSString *key, NSString *comment) NSString *NSLocalizedStringFromTable(NSString *key, NSString *tableName, NSString *comment) NSString *NSLocalizedStringFromTableInBundle(NSString *key, NSString…

Swift での Class 取得メソッド

Objective-C で NSObject の Class を取得するには class (クラスメソッドとインスタンスメソッド) classForCorder (インスタンスメソッド) classForKeyedArchiver (インスタンスメソッド) classForKeyedUnarchiver (クラスメソッド) などのメソッドがある。…