読者です 読者をやめる 読者になる 読者になる

ObjecTips

基本Objective-Cで iOS とか OS X とか

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

Photos.framework でスクリーンショット画像の一覧を取得する

iOS 9 β2で PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2) が追加された。 これを使えば写真ライブラリからスクリーンショット画像のみを取得したり、逆にスクリーンショットを排除した画像一覧を取得する事ができる。 コードは以…

NSUserDefaults の変更通知を受け取る

NSUserDefaults には NSUserDefaultsDidChangeNotification という通知が用意されていて変更通知を受け取る事ができる。 この通知は userInfo が nil になっていて、何が変更されたのか変更の詳細を知る事ができない。 NSUserDefaults の何のキーが変更され…

iOS 8リマインダーアプリの挙動調査 その2

前回の内容は以下 iOS 8リマインダーアプリの挙動調査 - ObjecTips 優先順位の !!! は UITextView の中に含まれている事が分かった。 これをコピーすると何が入っているのか。 UIPasteboard を使って中身を見てみた。 すると pasteboardTypes には ( "com.ap…

iOS 8リマインダーアプリの挙動調査

リマインダーアプリの優先順位の表示を参考にするため、どのように実装されているのか調べてみた。 優先順位の !!! の部分は attributedString もしくは attachment の画像として UITextView の中に一緒に入れられているっぽい。 しかしテキスト編集時にこの…

dispatch_block_t

dispatch/object.h に以下のような定義がある。 typedef void (^dispatch_block_t)(void); 自前の実装の中で - (void)test { void (^blockName)(void) = ^{ }; } @interface MyObject : NSObject @property (nonatomic, copy) void (^blockName)(void); @end…

ARC で retain count を調べる

ARC環境では retain count を取得する retainCountメソッドと手動で retain release を行う retain release メソッドが使えなくなった。 でもいつどこでオブジェクトが保持され解放されているかオブジェクトの retain count を調査したい時がある。 そういう…

iOS 8.3 to iOS 9.0 API Differences CoreTelephony

まだWWDCのネットワーク系のビデオを見ていないので紹介されているか分からないけど、たぶんされていないであろう CoreTelephony の変更点について。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Dif…

iOS 8.3 to iOS 9.0 API Differences CoreLocation

iOS 9 での CoreLocation の変更点 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り - ObjecTips iO…

UITableViewCell を左スワイプしてボタンを表示するUI

UITableViewCell を左スワイプした時に表示されるボタンは iOS 7 までは削除ボタンのみに固定されていた。 削除ボタンのタイトルはデリゲートメソッド - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath…

テスト時のログを見やすくする

前回 XCTest の name プロパティを使ってテスト時のログを見やすくする方法について書いた。 XCTest の name プロパティの活用 - ObjecTips その時は XCTest の name プロパティがあるのを知って「これを使えばログを見やすくできるんじゃないか?」という思…

XCTest の name プロパティの活用

XCText.framework でテストを書く時テストケースのクラス階層は MyTests: XCTestCase : XCTest となっていて XCTest には name というプロパティがある。 このプロパティで、今どのクラスのどのテストケース(テストメソッド)が実行されているかを知る事が…

Inter-device Audio Mode

Keynote その他で全然触れられてなかった Inter-device Audio Mode (IDAM) というおもしろい機能が WWDC2015 Session 507 What's New in Core Audio で紹介されていた。 https://developer.apple.com/videos/wwdc/2015/?id=507 この機能は iOSデバイスをUSB…

WebView の UserAgent を取得設定する iOS 9対応

UserAgent の取得 UIWebView では stringByEvaluatingJavaScriptFromString: メソッドで JavaScript を実行して UserAgent を取得できる。 iOS 8以降の WKWebView では evaluateJavaScript:completionHandler: メソッドで JavaScript を実行して UserAgent …

iOS 8.3 to iOS 9.0 API Differences ネットワークとWeb周り

結構 diffs の量が多いので分割分割で今回はネットワークとWeb周りについて。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differen…

iOS 8.3 to iOS 9.0 API Differences オーディオ周り

オーディオ周りの変更点のまとめ。いい感じに進化していってる。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to iOS 9.0 API Differences ネットワ…

iOS 8.3 to iOS 9.0 API Differences Core Image

画像周りの変更点をまとめようと思ったら Core Image だけで済んでしまったので Core Image だけ。 関連記事は以下 iOS 8.3 to iOS 9.0 API Differences Core Image - ObjecTips iOS 8.3 to iOS 9.0 API Differences オーディオ周り - ObjecTips iOS 8.3 to …

デフォルトの EKSource について その2

前回の記事で、デフォルトでは2つの EKSource が存在する事について書いた。 デフォルトの EKSource について - ObjecTips iCloud のアカウントを設定するとさらに EKSourceTypeCalDAV EKSourceTypeSubscribed の2つのソースが追加される。 一覧は以下 title…

Framework名とクラスヘッダファイル名のイレギュラー

XCTest.framework において XCTest クラスを定義しているヘッダファイルはちょっとイレギュラーな形になっている。 通常 XXAbc というクラス名であれば XXAbc.h というヘッダファイルで定義されるが XCTest の場合は XCAbstractTest.h というヘッダファイル…

リマインダーの優先順位 その2

少し前にリマインダーの priority プロパティについて書いた。 リマインダーの優先順位 - ObjecTips その後いろいろと調べていて OS X の方の EventKit/EKTypes.h を見ていたら以下のように priority の定数がしっかりと定義されていた。 typedef enum : NSU…

ウェブブラウザでの位置情報に基づくアプリのURL

たまたまウェブサーフィンをしていたら iTunes でのアプリの URL が従来のものから変わっているものを発見した。 例えば Apple のリリースしている iBooks の場合以下のようになる。 USページ https://itunes.apple.com/us/app/ibooks/id364709193?mt=8 JPペ…

アプリ全体を Dynamic Type に対応させる

アプリを Dynamic Type に対応させようと思って実装してみた。 IBでフォント指定可能なUI まずIB上で設置できるUIをいくつか配置する。 UILabel UIButton UITextField UITextView はIB上でフォントの設定ができるので Dynamic Type に対応したフォントを設定…

デフォルトの EKSource について

EKSource 上記コードでカレンダーへのプライバシーアクセスとリマインダーへのプライバシーアクセスを表示して全ての EKSource の配列を取得できる。 このソースは iCloud や CalDav を設定する事で増減するが、デフォルトでは2つのソースが用意されている。…

位置情報に基づくリマインダーの通知が利用できないデバイス

参考 iPhone および iPad でリマインダーを作成および使用する - Apple サポート 当然と言えば当然かも知れないけど、iPod touch と iPad Wi-Fi モデルでは利用できない。 リマインダー.appでのリマインダー詳細画面では「指定場所で通知」の項目自体が非表…

リマインダーの優先順位

EKReminder の priority プロパティ @property(nonatomic) NSInteger priority; なぜか現時点でまだドキュメントに記載が無いが、ヘッダファイルには定義が載っている。 ヘッダファイルのコメントによれば priority の値は最高が1、最小が9になっていてRFC 5…

UIDeviceFamily 一覧

ビルドしたアプリの Info.plist 内に設定されている UIDeviceFamily キーは開発者が明示的に設定するものでは無く、ビルド時に Xcode によって自動で設定される。 公式にドキュメントに載っているのは以下 値 デバイス 1 iPhone, iPod touch 2 iPad iPhone, …

Share Extension の NavigationItem をカスタマイズする

Share Extension のテンプレートで作成される SLComposeServiceViewController のサブクラスを自前のコントローラクラスとして、コード内では self として説明する。 Share Extension のデフォルトの表示が以下 self.title = @"Title"; これで NavigationBar…

AppleScript でウィンドウを閉じる

アプリケーションを指定して windows で全てのウィンドウを閉じる。 ウィンドウ指定で閉じる場合は window index の形式でウィンドウを指定。 index 1で最前のウィンドウを指定、index 2 で最前から1つ後ろのウィンドウを指定して閉じる。

AppleScript でアプリケーションを起動・終了する

AppleScript でのアプリケーションの基本操作 アプリケーションの起動には run と activate の2種類があって run は単にアプリケーションを起動するだけ。 activate はアプリケーションを起動してアクティブにする。Dock クリックでのアプリケーション起動と…

StoreKit の iOS 8.3 での変更点

iOS 8.3 で StoreKit に若干の変更があった。いずれも役に立つ変更。 ファミリー共有の Ask to Buy のテストが可能に SKPayment @property(nonatomic, readonly) BOOL simulatesAskToBuyInSandbox NS_AVAILABLE_IOS(8_3); SKMutablePayment @property(nonato…

Apple Remote Desktop でコマンドでログイン

Apple Remote Desktop で Unix コマンドを送信 の機能を使って複数台マシンを一気にログインさせる方法。 まず システム環境設定>ユーザとグループ>ログインオプション で ログイン時の表示をユーザのリストから名前とパスワードに変更。 これでログイン画面…

Apple Watch の対応言語 その2

前記事は以下 Apple Watch の対応言語 - ObjecTips この記事から程なくして Watch OS 1.0.1 で対応言語が増えた。 追加された言語は以下 日本語表記 母国語表記 オランダ語 Nederlands ポルトガル語(ブラジル) Português (Brasil) デンマーク語 Dansk スェ…

発着信と通話の開始停止を検出する

前回に続き CoreTelephony のネタ 携帯キャリアの情報を取得する - ObjecTips CoreTelephony を使って電話の発着信と通話の開始停止を検出できる。 コールバックはアプリがアクティブな時に受け取れる。 CTCallStateIncoming 電話がかかってきた時 CTCallSta…

携帯キャリアの情報を取得する

CoreTelephony.framework を使えばできるらしい。知らなかった。 CTTelephonyNetworkInfo をインスタンス化して subscriberCellularProvider メソッドを呼べば CTCarrier でキャリア情報が取得できる。 CTCattier にはキャリア情報に関するいくつかのプロパ…

Formatterクラス まとめ

Framework クラス OS X iOS 用途 Foundation NSNumberFormatter 10.0 2.0 数値 Foundation NSDateFormatter 10.0 2.0 日付 Foundation NSByteCountFormatter 10.8 6.0 Byte,KB,MB,GB 等 MapKit MKDistanceFormatter 10.9 7.0 メートル、ヤード、キロ 等 Foun…

Photos.framework でカメラロールを取得する

Photos.framework でカメラロールを取得する方法が分かり辛かったので備忘 fetchAssetCollectionsWithType:subtype:options: メソッドの引数の type で PHAssetCollectionTypeAlbum を指定した場合、写真アプリで作成したものとiTunesで同期したアルバムの一…

スクリーンショットを検出する

iPhone のホームボタンとロックボタン同時押しでのスクリーンショットを検出する UIApplicationUserDidTakeScreenshotNotification が iOS 7 で追加されている。 これを使えばスクリーンショットを検出できる。 [[NSNotificationCenter defaultCenter] addOb…

WatchKit App の表示名

WatchKit App の表示名を変える時の備忘 表示 設定 iPhoneのApple Watchアプリ内 iOSアプリ(親アプリ)のCFBundleName*1 Apple Watchでのアプリ起動時 WatchKit AppのCFBundleName or CFBundleDisplayName*2 iPhone の Apple Watchアプリにはなぜか CFBundl…

Share Extension の ConfigurationViewController を投稿画面のようにブラー表示する

ピンポイントなタイトルだけど Share Extension の実装の際にこれはやっておきたいなという事で。 まずプロジェクトへの Share Extension の追加は省略。 設定が終わると Safari などから Extension を呼び出す事ができる。 とりあえず名前は Test Share Ext…

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 (クラスメソッド) などのメソッドがある。…

Apple Watch の対応言語

Apple Watch 対応アプリをいざ App Store に申請しようとスクリーンショットを準備していて気付いた。 Apple Watch の対応言語は少ない? 日本語表記 母国語表記 日本語 日本語 英語 English フランス語 Français フランス語(カナダ) Français(Canada) ドイ…

Stickies の保存データを取り出す

以前使っていた Mac の Stickies にいろいろとメモが残っていたのでデータを取り出したい。 Mac 自体はHDDが壊れてしまって起動しないがユーザのホームのバックアップは取ってあるという状態なので、Stickies.app を起動して中身を以降する事ができない。 保…

Storyboard で UIViewController の dismiss を設定できるようにする

Storyboard で segue を設定して画面遷移を作っていく時、Modal 表示した ViewController にキャンセルボタンを設置する事がままある。 この時の ViewController への実装は - (IBAction)cancel:(id)sender { [self.presentingViewController dismissViewCon…

Xcode の Fonts & Colors その2

これの続き Xcode の Fonts & Colors - ObjecTips Xcode の Fonts & Colors の設定画面にプリインストールされているテーマファイルは plist形式の .xccolortheme ファイルで、以下の場所に内蔵されている。 /Applications/Xcode.app/Contents/OtherFramewor…

Xcode の Fonts & Colors

Xcode の Fonts & Colors の設定一覧を調べた 太字のところが色とフォントの設定が反映される箇所 Source Editor 適用箇所の例 Plain Text メソッド名、ファンクション名、クラス定義など- (void)method;void func();@interface MyObject : NSObject@impleme…

WatchKit Extension から親アプリを起動した時の挙動

WKInterfaceController の openParentApplication: メソッドから親アプリが起動された際にどのような処理の流れになるのか確認してみた。 確認方法は以下 親アプリとエクステンションの両方に NSLog を仕込む Xcode で WatchKit App をターゲットにしてrunす…

iOS 8での位置情報のプライバシーアクセス

iOS 7では CLLocationManager を用いて位置情報を利用する際に自動的にシステムのアラートが表示される。 CLLocationManager *locationManager = [[CLLocationManager alloc] init]; [locationManager startUpdatingLocation]; self.locationManager = locat…