ObjecTips

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

Tips

SSReadingList で出来る事

リーディングリスト周りのAPIを使って何が出来るのか調査。 Framework は SafariServices.framework でリーディングリスト周りのクラスは SSReadingList のみ。 API は以下 イニシャライザ + (nullable SSReadingList *)defaultReadingList; - (instancetype…

watchOS 2.2 API Diffs

前記事の iOS と同じく β3 での変更点に限らず watchOS 2.2 から watchOS 2.3 で今のところ追加予定のものを調査。 (網羅はしてない) 以下ドキュメント watchOS 2.2 API Diffs / watchOS 2.1 to watchOS 2.2 API Differences https://developer.apple.com/…

iOS 9.3 β3 API Diffs

β3 での変更点に限らず iOS 9.2 から iOS 9.3 で今のところ追加予定のものを調査。 (網羅はしてない) ドキュメントは以下2つ iOS 9.3 API Diff / iOS 9.2 to iOS 9.3 API Differences https://developer.apple.com/library/prerelease/ios/releasenotes/Ge…

UITextView で「リッチテキストとしてペースト」pasteAsRichText を実装する その2

前回 前回の結果を踏まえて copy: メソッドもオーバーライドして挙動をカスタマイズする事にする。 簡単なのは copy: メソッドの super の挙動を呼び出してペーストボードの中身を作ってから自前で追加したいものを加える方法。 実装 - (void)copy:(id)sende…

UITextView で「リッチテキストとしてペースト」pasteAsRichText を実装する

OS Xでの挙動 OS Xの NSTextView には - (void)paste:(id)sender; - (void)pasteAsPlainText:(id)sender; - (void)pasteAsRichText:(id)sender; これらのメソッドがあって、システムのペーストの挙動をそのまま使う事もできるしプレーンテキストやリッチテキ…

AppleScript の JavaScript for Automation で plist ファイルを作成する

上記の記事ではJSONファイルの書き出し保存を行った。 iOS でデータを扱う際には JSON より plist の方が読み込みが簡単なので plist 形式でのファイル保存もさらっておく。 plist の書き出しは NSArray or NSDictionary を writeToFile:atomically: で書き…

AppleScript の JavaScript for Automation で Excel から JSON ファイルを作成する その2

前回 前回のコードではエクセルの1行目の colums が固定長で key も固定の値として実装されていた。 これを改良して可変長に対応するよう修正してみた。 シートが何行何列あってもシート全体を一括して JSON に変換できる。 以下の決まり事で実装 シートの1…

NSString が数字のみで構成されているかを判定する その2

以前 NSCharacterSet の decimalDigitCharacterSet メソッドを使って文字列が数字のみを含んでいるかを調べるコードを書いた。 ここに少しコードを追加して文字列がローカライズとフォーマットされた数字表記のみを含んでいるかどうかを調べるコードにする。…

コピー可能な UILabel

編集不可な文字列を UILabel で表示させつつユーザにコピー操作だけはさせたいという事があったので実装を試みてみた。 コピーの方法は UITextView や UITextField でコピー操作を行う時と同様にポップアップのメニューを表示するようにする。 メニューは UI…

OSType, FourCharCode から NSString への変換

いろいろデバッグしていて OSType や FourCharCode を扱う事があるので備忘。 OS Xだと Foundation.framework に NSFileTypeForHFSTypeCode という便利な関数が用意されている。 この関数はシングルクォーテーションで囲われた文字列を生成する。 OSType typ…

ナビゲーションバーを透明にする transparent UINavigationBar

サンプルとして UINavigationController の rootViewController に UITableViewController を設定したものを使う。 UINavigationItem に適当にボタンを設定して UITableView の tableViewHeader に UIImageView を aspectToFill で入れて画像を設定。 Storyb…

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

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

iOS 9 での言語の identifier の変更

AppleからiOS 9の言語の identifier の変更についてドキュメントが公開されていた。 NSLocale.preferredLanguages() が返す値がiOS 8以前とiOS 9以降とで異なっていて、 以前は en だったものが en-US というように言語 Language と地域 Region がハイフンで…

AppleScript の JavaScript for Automation で Excel から JSON ファイルを作成する

これまでの記事 AppleScript の JavaScript for Automation で Excel のセルの値を取得する - ObjecTips AppleScript の JavaScript for Automation でテキストをファイルに保存する - ObjecTips AppleScript の JavaScript for Automation でテキストをファ…

AppleScript の JavaScript for Automation でテキストをファイルに保存する Objective-C Bridge編

前回の記事 AppleScript の JavaScript for Automation でテキストをファイルに保存する - ObjecTips 前回は AppleScript の StandardAdditions を使ってテキストファイルの書き出し保存を行ったが、 まずどんな関数があるのか、そして関数の引数や実行時の…

AppleScript の JavaScript for Automation でテキストをファイルに保存する

StandardAdditions を使用する 保存ダイアログを表示するには StandardAdditions ライブラリに入っている chooseFileName 関数を使う。 JavaScript for Automation では StandardAdditions を使う前に includeStandardAdditions を有効にしてこのライブラリ…

AppleScript の JavaScript for Automation で Excel のセルの値を取得する

環境 OS X 10.10.5, Microsoft Office 2011, Microsoft Excel 14.5.4 AppleScript の JavaScript for Automation を使用 準備 スクリプトエディタを起動 ライブラリに Excel を追加して AppleScript のリファレンスライブラリを参照できるようにする。 エデ…

iOS 8.0.2 iPad で Could not load NIB in bundle

クラッシュレポートにいくつか Could not load NIB in bundle のエラーが上がってきていたので調べてみた。 発生しているのはいずれも iOS 8.0.2 で機種は iPad Air, iPad mini 2 が確認された。 アプリ自体は iPhone のみ対応しているアプリで、iPhone では…

AVAudioPlayer と AVPlayer の初期化時の注意点

AVAudioPlayer には NSURL で初期化を行う以下のメソッドがある。 - (instancetype)initWithContentsOfURL:(NSURL *)url error:(NSError **)outError; AVPlayer にも NSURL で初期化を行う以下のメソッドがある。 + (id)playerWithURL:(NSURL *)URL; - (inst…

AVAudioRecorder deleteRecording でクラッシュ

AVAudioRecorder を生成後、録音を開始しないまま deleteRecording メソッドを呼ぶとクラッシュしたりエラーが出たりする。 以下のコードで試せる。 iOS 8.2, iOS 8.3 ではクラッシュ iOS 9.0 β ではコンソールに以下のエラーが出たがクラッシュはしなかった…

CITextFeature の iOS 9β4 での変更点

iOS 9で追加されたテキスト領域の矩形を検出できる CITextFeature に iOS 9 β4 で subFeatures というプロパティが追加された。 @property (readonly) NSArray *subFeatures; この subFeatures プロパティは検出した領域内に含まれる各文字の領域を示す CITe…

Apple Watch と WatchOS のデバイス情報を取得する

iOS 9 β4で WKInterfaceDevice にデバイス情報を取得するメソッドが追加された。 追加されたメソッドは以下で取得できる情報は iOS の UIDevice に存在する同名のメソッドと同じ。 @property(nonatomic, readonly, copy) NSString *systemVersion WK_AVAILAB…

Photos.framework で自撮り(selfie)画像の一覧を取得する

iOS 9 β3で PHAssetCollectionSubtypeSmartAlbumSelfPortraits NS_AVAILABLE_IOS(9_0) = 210 が追加された。 以前紹介したスクリーンショット画像の一覧取得は Photos.framework でスクリーンショット画像の一覧を取得する - ObjecTips PHAssetMediaSubtype …

viewWillDisappear: では super をいつ呼ぶべきか

- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // some implements } と - (void)viewWillDisappear:(BOOL)animated { // some implements [super viewWillDisappear:animated]; } どちらが良いの?という議題 Appleのド…

UITableViewCell で Auto Layout + UITextView を使う際の Tips

iOS 8の self-sizing cell で自動で高さを調整してくれるように実装したところちょっと問題が。 まずセルのレイアウトは以下 上に UILabel, 下に UITextView を配置してラベルとテキストビューの間は0px ラベルとテキストビューそれぞれのセルの contentView…

UITableViewCell のメニューの表示位置をカスタマイズする

まず UITableView のセルのメニュー表示の実装方法はこちら UITableView のセル選択時にメニューを表示する - ObjecTips 前回の方法では UITableViewDelegate を使ってメニュー表示をする時と同じ標準的な位置にメニューが表示される。 セルへのメニューの表…

UITableViewCell 選択時にメニューを表示する

前回は UITableViewDelegate を使って簡単にメニュー表示をする方法について書いた。 UITableView のセルの Copy Paste メニューを表示する - ObjecTips この方法はセルを長押しした時にメニューを表示する事ができるが、セルをタップして選択したらすぐにメ…

UITableViewCell で Copy Paste メニューを表示する

UITableView にはセルの Copy Paste メニューを簡単に実装できる delegate メソッドが用意されている。 // Copy/Paste. All three methods must be implemented by the delegate. - (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPa…

デフォルトの EKCalendar について

デフォルトの EKSource iOS にはデフォルトで2つのデフォルトのソース EKSource が用意されている。 1つはローカルのカレンダー(iCloud同期を設定しない場合)。 もう1つは EventKit からはアクセスできない誕生日用のカレンダー。 このあたりの詳しい話は…

float 等の浮動小数点数の誤差を考慮して等価比較する

よく定数を忘れるので備忘 float の誤差を考慮して等価比較するには FLT_EPSILON を使う double のための DBL_EPSILON long double のための LDBL_EPSILON も用意されている。 例えば float a が float b とイコールであるかをチェックするには a と b との…