xyk blog

最近は iOS 開発の記事が多めです。

xcode

Swift - Struct のイニシャライザを Xcode で自動生成する

検証環境: Xcode 12.4 Swift 5.3.2 Swift の Struct にはデフォルトで暗黙的なイニシャライザ init メソッドが定義されているので自分で実装する必要ないのだが、public structで定義して別モジュールから import して使う場合は使用できない。 以下の Initi…

Xcode 関連ファイルを定期的に削除する

検証環境: Xcode 12.2 Swift 5.3.1 Xcode のキャッシュファイルなどの関連ファイルはかなりのディスクスペースを消費するので定期的に削除するほうがよい。 DerivedData 中間生成ファイル。アプリ単位でビルド時に作成される。 ビルドが突然できなくなった場…

Xcode で証明書を自動生成する方法

検証環境: Xcode 12 証明書の期限が切れてたので新しい証明書を Xcode から自動生成した。 1年に一度しかやらず、やり方を忘れるのでメモしておく。 昔ながらの手順としては - Keychain Access.app から Certificate Signing Request (CSR) を作成 - Apple …

CircleCI で SSH fingerprint が原因で xcodebuild エラー

CircleCI で iOS アプリをxcode: "12.0.0"でビルド中に以下のエラーが出た。 SSH fingerprint が原因でパッケージの依存関係の解決に失敗している。 xcodebuild: error: Could not resolve package dependencies: The server SSH fingerprint failed to veri…

Xcode にキーボードショートカットを追加する

検証環境: Xcode 12 Swift 5.3 Finder を開き、「Command(⌘) + Shift(⇧) + G」を押す。 /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Versions/A/Resources/ を入力してディレクトリを開く。 IDETextKeyBindingSet.plist ファイルをエディ…

UICollectionViewCell で IBDesignable を使ったカスタムビューがリアルタイムプレビューに反映されない

検証環境: Xcode 11.4 Swift 5.2 IBDesignable を使ったカスタムビューは StoryBoard 上に配置するとリアルタイムでデザインをプレビューすることができる。 しかし、UITableViewCell 上に配置したときはプレビューできるのに UICollectionViewCell 上にカス…

Xcode のデバッグ時に `error: Couldn't IRGen expression, no additional error` が発生

検証環境: Xcode 11.4 Swift 5.2 ちょっとどのタイミングででそうなったのか、把握できていないんだけど、Xcode でブレークポイントで止めて、po コマンドで出力しようとしたら error: Couldn't IRGen expression, no additional error が発生して出力できな…

IBDesignable を使ったカスタムビュー使用時に発生するエラー原因を調べる

検証環境: Xcode 11.3.1 Swift 5.1.3 Storyboard上で IBDesignable を使ったカスタムビューを貼り付けたところ、 error: IB Designables: Failed to render and update auto layout status for UIViewController (nyp-0u-XJD): The agent crashed というエラ…

IBDesignable を使ったカスタムビューのプレビュー時に呼ばれるメソッドについて

検証環境: Xcode 11.3.1 Swift 5.1.3 IBDesignable や IBInspectable を使うことで Storyboard や Xib 上でカスタムの属性の設定ができ、変更がリアルタイムに反映されてプレビューできるようになります。 ところで、IBOutlet で接続したビューに対して初期…

Xcode の Swift Package Manager で Repository を追加しようとしたらエラーになる

検証環境: Xcode 11.3.1 Swift 5.1.3 Swift Package Manager でリポジトリを追加しようとしたところ以下のようなエラーが出た。 Couldn’t communicate with a helper application. Try your operation again. If that fails, quit and relaunch the applicat…

CGRect 構造体で使える便利なメソッド

offsetBy origin の移動 // 右下に移動 let newRect = rect.offsetBy(dx: 10, dy: 10) insetBy center は変えずに size の変更 let rect = CGRect(x: 20, y: 20, width: 100, height: 100) // 縮小する -> (x: 40, y: 40, width: 60, height: 60) let smalle…

Swift で Dictionary をマージする

検証環境: Xcode 11.1 Swift 5.1 Dictionary の mergeまたはmergingメソッドを使う。 // merging do { let a = ["a": 100] let b = ["a": 200, "b": 300] // 重複したKeyは a を優先させる場合 let result1 = a.merging(b) { (a, b) in a } print(result1) /…

grep , sed コマンドで .xib や .storyboard ファイル内の文字列を置換する

Xcode での検索・置換機能は .xib や .storyboard などの xml ファイルは対象外となるようだ。 仕方がないのでコマンドラインで置換を行う。 例: 文字列FooをBarに置換する grep -rl --include='*.xib' --include='*.storyboard' 'Foo' ./MyProject | xargs …

URL Scheme の追加と Configuration によって変更する方法

環境: Xcode8.3.2 Swift3 URL Scheme の追加 Target -> Info -> URL Types から URL Scheme を追加する。 まだ何も追加していない状態。 +ボタンを押してidentifierとURL Schemesを追加した。 URL Schemes にはカンマ区切りで複数入力も可能。 identifier: …

Storyboard 上で UIScrollView を AutoLayout を使って設定する

環境: Xcode8.2.1, Swift3 Storyboard 上で UIScrollView を AutoLayout を使って設定する方法について。 ちょっとハマったのでメモ。 ビューの階層構造は UIViewController.view -> UIScrollView -> UIView とする。 UIScrollView の制約 UIScrollView の制…

Font Awesome を Xcode で使用する

環境: swift3 fontawesome.io FontAwesome をXcodeにカスタムフォントとして取り込んで使用する方法。 以下からFontAwesome.otfをダウンロードする https://github.com/FortAwesome/Font-Awesome/blob/master/fonts/FontAwesome.otf Xcode のプロジェクト内…

Fastlaneでplistを更新する

fastlane: 2.3.0 Fastlaneでplistを更新する方法を調べたのでメモ。 update_info_plistというアクションを使う。 fastlane/update_info_plist.rb at master · fastlane/fastlane · GitHub app_identifierとdisplay_nameについてはアクションのパラメータに直…

XcodeをAppStoreを使わずインストールしたときのメモ

Appleアカウントでログインし、以下からダウンロードする。 https://developer.apple.com/download/ https://developer.apple.com/download/more/ xip ファイルを選択する。 リリース直後だとかなり時間がかかる。 Chrome でダウンロードし、展開しようとし…

iPhoneのUDIDを調べる方法

Xcode(8.0) で調べる Window -> Devices and Simulators からiPhoneデバイスを選択、identifierの部分が UDIDになる。 iTunes で調べる 初期表示はシリアル番号となっているがその辺りをクリックすると表示項目が切り替わり、UDIDが現れる。 シリアル番号 ->…

LaunchScreen.storyboard に貼り付けた画像が表示されない

シミュレータでは表示されるが、実機だと表示されない。 バグらしい、とりあえず自分の場合は iPhone 側の再起動で表示されるようになった。 Launch Storyboard not showing image when projec... | Apple Developer Forums https://forums.developer.apple.…

SwiftでDEBUG Macroを使う

環境: swift2.2 Xcode7.3.1 Swiftで以下のようなDEBUG Macroを使いたい。 #if DEBUG print("DEBUG") #elseif STAGING print("STAGING") #else print("ELSE") #endif Objective-C の場合はPreprocessor Macrosに設定していたが Swift ではOther Swift Flagsの…

iOS9対応メモ

環境: Xcode7 GM iOS9 対応で行った作業メモ。 App Transport Security(ATS)対応 HTTPS 接続にする必要あり。今回はとりあえずHTTPを許可するようにInfo.plistに以下の手順で追加する。 NSAppTransportSecurityを Dictionary で追加。 その下でNSAllowsArbit…

よく使う Xcode のショートカットメモ

developer.apple.com Command(⌘) + Option(⌥) + [ 選択行(複数行可)を上に移動 Command(⌘) + Option(⌥) + ] 選択行(複数行可)を上に移動 Command(⌘) + Control(^) + 左 or 右 超使う。ソースコード上の定義にジャンプしたり、戻ったり。 トラックパッドの左…

Xcode の Localization でハマったのでメモ

環境: Xcode 6.1 iOS 8.1 Simulator 結論から言うと Xcode 6.1 と iOS 8.1 Simulator の環境で、 iOS Simulator の言語設定に対応したローカライズファイルLocalizable.stringsを用意しても反映されないバグがあるらしい。 ワークアラウンドとして iOS Simu…