Cocoaメモ

Appleプラットフォームでの開発メモ

1月9日、初代iPhone発表の日にiPhone SDK 2時代をふりかえる

これははてなエンジニアアドベントカレンダー2022の40日目の記事です。昨日は id:kouki_danのCI/CDサービスのOpenID Connect対応 Dive Intoでした。 16年前の今日、2007年の1月9日は初代iPhoneが発表された日です。思い返すと、初期のiPhoneネイティブアプリ…

ConcurrencyのTaskを自動キャンセル

ConcurrencyのTaskをCombineのPublisherのように自動キャンセルしたいとき、以下のようなものを用意しておくと便利かもしれない。 extension Task { public func store(in set: inout Set<AnyCancellable>) { set.insert(AnyCancellable { self.cancel() }) } } var cancella</anycancellable>…

NSPersistentContainerのsqliteファイルパスをカスタマイズする

基本 let container = NSPersistentContainer(name: "Sample") NSPersistentContainer.init(name:) By default, the provided name value is used to name the persistent store and is used to look up the name of the NSManagedObjectModel object to be …

NSPersistentContainer.loadPersistentStoresのcompletionHandlerはデフォルトで同期的に呼ばれる

NSPersistentContainer.loadPersistentStores(completionHandler:)のcompletionHandlerは、デフォルトではloadPersistentStoresを抜ける前に同期的に呼ばれます。 理由 NSPersistentContainer.persistentStoreDescriptions[0].shouldAddStoreAsynchronously…

Core DataとiCloudの統合年表

iOS 13 Core DataとCloudKitを統合したNSPersistentCloudKitContainerが追加された Using Core Data With CloudKit - WWDC 2019 - Videos - Apple Developer iOS 10 NSPersistentContainerが追加された What's New in Core Data - WWDC 2016 - Videos - Appl…

Lightweight MigrationのManaged Object Modelは最新の一つだけ保持すればよいらしい

Core Dataで、Lightweight Migration で済む場合、アプリが持つManaged Object Modelは最新の一つだけでよいようです。 つまり、次のように、複数のモデルを持つ必要がありません。 xcdatamodeldに最新のバージョンのxcdatamodelだけを持つか、単純にxcdatam…

iOS Simulatorで、複数アイテムをドラッグする方法

検証環境 Xcode 12.5 手順 ドラッグ操作を開始する ctrlキーを押しながら、マウスボタンを離す マウスボタンを離したら、ctrlも離してよい マウスボタンを離した位置に、1本目の指を押しっぱなしにしていることを示す円が表示される 次からのマウスボタンタ…

Xcode WorkspaceでアプリプロジェクトとSwift Packageを束ねる

Xcode Workspace(xcworkspace)には複数のXcode Projectを束ねて、暗黙の依存関係を持たせる機能があります。 Xcode Workspace (Xcode Concepts) 例えば、アプリ本体のxcodeprojとライブラリのxcodeprojをWorkspaceで束ねると、アプリ本体側からライブラリxco…

1画面から始めるStoryboard

第56回 Cocoa勉強会関西で、『1画面から始めるStoryboard』というテーマで発表しました。 1画面から始めるStoryboard from Yuichi Fujishige iOS 4時代から開発しているプロジェクトで、既にXIBが沢山あって全面的にStoryboardに移行するのは大変、という状…

Audio QueueでSin波再生

第49回 Cocoa勉強会関西で、Audio Queue Servicesでのサウンド再生の初歩について発表しました。 Audio QueueでSin波再生 from Yuichi Fujishige Audio Queue Services Programming Guideではファイルを読み込んで再生するという例で説明がなされていますが…

iOS 6 のAuto Rotation

第47回 Cocoa勉強会関西で、 『iOS 6 のAuto Rotation』について発表しました。 iOS 6 のAuto Rotation from Yuichi Fujishige スライドの補足 window.rootViewController必須 window.rootViewControllerが設定されていない場合うまく動きません。rootViewCo…

CAKeyframeAnimation

第45回 Cocoa勉強会関西で、 『CAKeyframeAnimation』について発表しました。 CAKeyframeAnimation from Yuichi Fujishige サンプルコード https://github.com/nakiwo/KeyFrameSample

Core Animationの明示的アニメーションで表示が元に戻る

第44回 Cocoa勉強会関西で、 『Core Animationの明示的アニメーションで表示が元に戻る問題』について発表しました。 Core Animationの話 Part.1 from Yuichi Fujishige サンプルコード https://github.com/nakiwo/CoreAnimationSample1

iOS 5から、ディスクが一杯になると/Library/Cachesがクリアされるようになった

iOS 5.0.1 で、"do not back up" というファイル属性が追加されました。 この属性はどういう時に使うのでしょうか。 Technical Q&A QA1719 How do I prevent files from being backed up to iCloud and iTunes? http://developer.apple.com/library/ios/#qa/…

UIViewControllerのコンテナ機能

第41回 Cocoa勉強会関西で、 iOS 5で追加されたUIViewControllerのコンテナ機能について発表しました。 UIViewController のコンテナ機能 from Yuichi Fujishige サンプルコード https://github.com/nakiwo/ViewControllerContainerSample