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

Pebble's Diary

プログラマーの作業メモ

Xcode6.4でボトルネックとなっている遅い処理を特定する(iOS/OSX)

Xcodeに付属するInstrumentsで遅い処理を特定する手順です。 Instrumentsの中のTimeProfilerを使います。 Profileを実行します。 TimeProfilerを選択します。 赤いボタンを押すと実行が始まります。 スレッド毎にかかった時間(milliseconds)と比率(%)が表示…

swiftのクラスをobjective-Cで継承することはできない

stackoverflow.com あるクラスをobjcからswiftへ移行するなら、継承関係にあるクラスはすべて、いちどきにswiftに書き換えないといけない。

ObjCのNS_ENUMのswiftからの見え方(swift2)

Objective-CでNS_ENUM定義がswiftでどのように見えるか実験した。 enum.h typedef NS_ENUM(NSUInteger, Element){ ElementFire, ElementWater, }; typedef NS_ENUM(NSUInteger, FRUIT){ FRUIT_APPLE_1, FRUIT_ORANGE_2, }; typedef NS_ENUM(NSUInteger, ANIM…

ObjCからswiftソース上で呼び出せるのはクラスまたはプロトコルのみ

勘違いしていたが、ObjC側からswiftソース上で呼び出せるのは、クラス(のメソッド)、プロトコル、整数型のenumのみだった。 swift上で書いたグローバル関数やグローバル変数は呼び出せないのだった。逆は可能。 つまり、ObjCのクラスはswiftへ移行できるが整…

OSXのAudioUnit自作ガイド

OSXのAudioUnitを自作する場合は、Appleの以下のサンプルソースを参考に作るのが、もっとも早道です。 TremoroUnitというトレモロ効果を与えるサンプルです。 Core Audio Utility Classes ビルドしてできたTremoro.componentをどこにインストールすればいい…

swiftで使えるAtomic系API (OSX/iOS)

swiftで使えるAtomic系APIがあったので備忘録としてリストアップしておく。 OSX/iOSで確認した。 func OSAtomicAdd32(__theAmount: Int32, __theValue: UnsafeMutablePointer<Int32>) -> Int32 func OSAtomicAdd32Barrier(__theAmount: Int32, __theValue: UnsafeMu</int32>…

pthread_mutex_t と NSLockはどのくらい速度に違いがあるのか

2つのスレッドでウェイトを入れながら、一つの変数に排他アクセスをそれぞれ5000回行ったときの時間です。 MacOSX 10.10.4 MacBook Air (13-inch, Early 2015) @synchronized 0.092384 sec objc_sync_enter 0.090988 sec pthread_mutex_t 0.091280 sec NSLoc…

The executable was signed with invalid entitlements.

Distribution用にいろいろ作業していたら、なぜかテスト用デバイスに上記のエラーで転送できなくなった。 Provisioning ProfileがDebug,Release共通になっていたので、Releaseの方はDistribute用、Debugの方をXcodeによって自動生成されたものに置き換えたら…

no matching provisioning profiles found for appex com.security.application-groups

no matching provisioning profiles found for appex com.security.application-groups iOSアプリのvalidationで上のようなエラーが出て1時間ほどハマっていたので、メモ。 解決方法は、Apple DeveloperのProvisioning ProfileのDistributionの対応アプリの…

NSString型のプロパティ

Objective-CでNSString型のプロパティににはstrong属性ではなく、copy属性を使った方がよいという記事をみかけますが、 私はデフォルトのstrongのまま使います。 copy属性を使った方がよい理由として、NSMutableStringの値を設定したときに、copy属性の方が…

Xcode C++ link error

"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::at(unsigned long) const", referenced from: 上記のリンクエラーがでるときは、以下のライブラリを追加すればよい。 libc++.dylib</char></char,>

Apple InAppItemのアップロード

現在InAppItemのファイルをXcode5.1.1でアップロードすることはできず、 ApplicationLoaderでアップロードするしかないようです。 OrganizerでのValidateすらできません。 手順 1) Xcode-Product-archiveする。 2) Orignizerでリストを選択しExportボタンを…

armv7s関連のリンクエラー

Xcode6から $(ARCHS_STANDARD)や $(ARCHS_STANDARD_32_BIT)や $(ARCHS_STANDARD_INCLUDING_64_BIT)には armv7sを含まなくなったようです。このせいでリンクエラーが出る場合があります。 対処方法としては、 armv7s対応をやめる のが素直ですが、armv7s対応…

静的fatライブラリに含まれるarchitectureの種類を確認するコマンド

$lipo -info lorem.a Architectures in the fat file: lorem.a are: i386 x86_64 armv7 arm64

「ld: framework not found Metal for architecture」 の対処方法

Xcode5(iOS-SDK7)とXcode6(iOS-SDK8)を両方入れた環境で、 Xcode5でプロジェクトビルドすると ld: framework not found Metal for architecture のリンクエラーが出ることがありますが、その対処方法です。 プロジェクトのLink Frameworks AutomaticallyをNO…

Xcodeでよく使うパス

Xcodeでよく使うパスのメモ 1) iOSでバイス、デバッグビルドで使われるパス。 古いバージョンの.aファイルなどが残っていると、間違ったものがリンクされるので、手動で消すときに使う。 ~/Library/Developer/Xcode/DerivedData 2) Xcode Pluginがインストー…

iOS/MacOSXのvDSP関数、多すぎてなかなか見つけられないのをなんとかする

iOS/MacOSXのvDSP関数というのは、サンプル数が多くなるほど、for文をまわすより確実に処理速度があがります。 驚くことにSIMD組み込み関数を使うよりも速く、アセンブラ命令によってかなりの最適化が入っているようです。 俺のアプリは信号処理なんてやって…

Xcodeのコンソールログファイルの置き場所

~/Library/Logs/iOS\ Simulator/*/system.log

Xcode5.1.1(2014-04-19時点最新)でメモリリークを調査する際のTIPSその2

InstrumentsのLeaksでメモリリークを調査する際のTIPSその2です。 Leaksで素早くメモリリークを調べて直すのにはコツが必要です。 SXXP細胞のアレと同じですね。 コツが分かっていないと無駄に時間を使ってしまいます。 そこでTIPSとしてまとめておきます。…

iOSでHTTPS通信の内容をキャプチャする方法のメモ

iOSでHTTPS通信の内容をキャプチャする方法のメモです。 実デバイスでもiOSSimulator(MacOSX)でもできますが、ここでは、 iOS実デバイスがHTTPS通信をキャプチャされる側、MacOSX 10.8をプロキシとして使用します。 以下の記事を参考にさせて頂きました。 ht…

sendSynchronousRequestをBasic認証で使う

NSURLConnectionにはsendSynchronousRequestというクラスメソッドがありますが、 Basic認証は動かない。 ということで自作してみました。 https://github.com/pebble8888/PBURLConnection @interface PBURLConnection : NSObject + (NSData *)sendSynchronou…

Xcodeでヒープ領域アクセスオーバーランを短時間で見つける

Xcodeにはデフォルトでヒープ領域(mallocやnew)のアクセスオーバーランを 検知してくれる機能があります。 ただ、一発で検知してくれません。確実に検知する方法をここでは紹介します。 例えば、以下のようなヒープ領域をオーバーランするサンプルを使います…

Xcode with XVim と MacVim を平行して使う

私は、Xcode with XVim と MacVim を平行して使っているのですが、これをやるためには、Xcodeで開いているソースファイルをカーソル位置を保存した状態でMacVimで開けないと正直やってられません。 この機能が動くようにする手順を書いておきます。 手順1) J…

Objective-Cでのメモリ管理tips

初心者向けにObjective-Cでのメモリ管理関連で私が持っている知識をまとめておく。 1) なるべくARC(Automatic Reference Counting)を使う。 2) IBOutlet にはARCの場合はweak、Non-ARCの場合はstrongを使う。 3) Non-ARCの場合、なるべくretain,releaseを書…

NSCopyingプロトコルに準拠する場合の実装メモ

NSCopyingプロトコルを実装する時に、いつも書き方を忘れているのでメモしておく。 @interface Bean : NSObject @property (nonatomic,strong) NSString* country; @end @interface Coffee : NSObject @property (nonatomic,assign) NSUInteger coffeeid; @p…

Objective-Cでruby風のシンタックスシュガーを使う

githubを眺めていたら面白そうなプロダクトを見つけたので紹介します。 NSArrayやNSDictionaryにカテゴリを使って、ruby風のシンタックスシュガーを使えるようにしています。 Objective-C と RubyMotion の中間のような感じです。 https://github.com/mneorr…

Objective-Cでフレームワークやスタティクライブラリを作る際の注意

Objective-Cのカテゴリ機能が含まれるstatic library を作ると、それを使う側は リンカフラグに "-ObjC" 、"all_load" を設定しないといけません。 Appleによる解説 私は面倒なのが嫌いなので、static libraryを作る際にはカテゴリを使わないようにしていま…

Objective-Cの新文法対応OSバージョン

Objective-Cには次々と新しい文法が追加されていますが、 レガシーなOSバージョンでどこまで対応しているのかいまいち分かりづらいです。 Appleの資料に一覧を見つけましたが分かりやすくするため、勝手に日本語化してみました。怒られたら削除します。 OSX…

Xcodeのデフォルトファイルテンプレートを変更する

Xcodeで新規Objective-Cクラスや新規C++ファイルクラスを生成するときに Copyright表示や、インクルードガードがデフォルトで設定されますが、 ファイルをたくさん作っていると、デフォルトの内容を毎回同じように修正していて 効率が悪いので、どうにかでき…

MacOSX 10.9へアップグレードしてしまったマシンをMacOSX 10.8に戻す

MacOSX 10.9にアップグレードするとiPhone Simulator5.0が動かなくなります。 こりゃあこまった。と思ったら、購入時の状態に戻す方法があるようです。 手順はこんな感じ。 1) 必要はファイルを全てバックアップする。 2) OS を Option + Command + r を押し…

iOS/Macプログラミング情報収集方法(プロ用)+学習方法(初心者用)

<情報収集方法> 私のiOS/Macでのプログラミング情報収集方法です。 1) クラス名でググる。 AppleのDocumentがトップにくると思いますが、短時間でアクセスできて便利。 2) Xcodeのコンパイルエラーメッセージでググる。 エラーメッセージを読んでも意味が…

doxygen形式の関数コメントを生成するvim plugin(C、Objective-C対応)

Vim Advent Calendar 2013 29日目の記事です。こんにちは@pebble8888です。 昨日は@kobadesuさんのはてなブログへVimからポストする でした。 普段のプログラミング作業で、関数のdoxygenコメントを書く時間をなんとか短縮できない かと思い、ひな形コメント…

C++,Objective-C の使い手のためのRuby講座

Rubyのクラスの理解に苦しんでおります。 Rubyのこの概念はC++,Objective-C でいうところのコレだよって感じに 強引に理解していこうと思います。 RubyはわりとObjective-Cに似ているので、そこから理解した方が 早く理解できそうです。 なぜかRubyの本にはO…

Xcode4.6.3(2013-08-21時点最新)でメモリリークを調査する際のTIPS

Xcodeでメモリリークを調べる場合はInstrumentsを使います。 Menu - Product - Profileを実行すればよいです。 うまく動かないときは、一旦iOSSimulatorで動かしてから実デバイスで実行してみてください。 私はメモリリークを調べる際は、実デバイスで行って…

ARC __bridge_transfer

ARCを使う場合に __bridge __bridge_transfer __bridge_retained があるが、違いがよくわからなかったので調べたところ、 __bridge_transferと__bridge_retainedは使うべきでないという結論に達した。 __bridge_transferは__bridgeした後にCFReleaseをコール…