query: tag:iphone

プリプロセッサ マクロとかコンパイラ フラグとか苦手です。
a-haがあったのでメモ。

##compiler flag編:-DNS_BLOCK_ASSERTIONS=1
NSAssertをリリースビルド時に無効して、そのフラグでNSLogも無効にしてしまおうという技です。2009年の記事ですが、参考に:

2009-12-03NSLogとNSAssertをリリース時に無効化する
http://iphone-dev.g.hatena.ne.jp/tokorom/20091203

Xcode 4.5ではこんな感じに設定してみました:
NS_BLOCK_ASSERTIONS_compiler flags.png

##preprocessing編:DNS_BLOCK_ASSERTIONS
動作的には上と同じ事なのですが、別の書き方。こっちのが文字数少ない分好きです。

Working with Assertions to Debug your Apps Posted on June 27, 2011
http://mobiledevelopertips.com/debugging/working-with-assertions.html

Xcode 4.5ではこんな感じに設定してみました:
NS_BLOCK_ASSERTIONS_preprocessing.png

ちなみに:

What's the “DNS_BLOCK_ASSERTIONS” (C compiler flag)?
http://stackoverflow.com/questions/2752574/whats-the-dns-block-assertions-c-compiler-flag

Just to clarify, -D defines a constant, and it is one of the confusing flags that doesn't have a space between it and it's parameter

日本語だとここもヒントになりました:

Xcodeでのプリプロセッサ定義
http://romly.com/archives/2009/10/define_by_project_setting.html

posted by satoko satoko on Tue 18 Sep 2012 at 15:19 with 0 comments

まだGDB初心者です。
忘れてしまったのでちゃんと書いておきます。

rails>>
print (CGRect) [myView frame]
print (CGSize) [myView frame].size
print (CGFloat) [myView frame].size.width
<<--

出典元:

GDB and Displaying Property values
http://www.iphonedevsdk.com/forum/iphone-sdk-development/37083-gdb-displaying-property-values.html

  • メソッド?として呼んでやる
  • CGRectにキャストする

というのがポイントなんですね。
ちなみにprintの代わりに、pでも下記でもOKです:

rails>>
p (CGRect)[view frame]
<<--

  • p:print
  • po:print object

これでおしまい

posted by satoko satoko on Wed 15 Feb 2012 at 14:10 with 0 comments

といっても、ほぼ全部二つのサイトの記事なんですが、いつもゴソゴソ探すのでまとめることにしました。

※ 要QuartzCore.framework

###Animating Interfaces with Core Animation: Part 1
惑星が軌道にそって動く+衛星がその周りを回るアプリ

http://nachbaur.com/blog/core-animation-part-1

###Animating Interfaces with Core Animation: Part 2
雲が左から右に流れていくアプリ

http://nachbaur.com/blog/core-animation-part-2

###Animating Interfaces with Core Animation: Part 3
押すとボタンがぶるんと震える(拡大して縮小する)アプリ

http://nachbaur.com/blog/core-animation-part-3

###Animating Interfaces with Core Animation: Part 4
軌跡にそって車を動かすアプリ

http://nachbaur.com/blog/core-animation-part-4

###Core Animation: Paths
軌道に沿って惑星が周り、さらにその軌道字体が3次元で回転するアプリ
(※Macアプリ)

http://watchingapple.com/2008/04/core-animation-paths/

###Core Animation: 3D Perspective
床と壁で3次元ぽく見せるアプリ
(※Macアプリ)

http://watchingapple.com/2008/04/core-animation-3d-perspective/

###Core Animation: Creating a Jack-in-the-box with CAKeyframeAnimation
びっくり箱、Jack in the boxアプリ
(※Macアプリ)

http://watchingapple.com/2008/04/core-animation-creating-a-jack-in-the-box-with-cakeyframeanimation/

###iPhone / iPad アプリのアニメーションをなめらかにするためのポイント3つ
アニメーションのパフォーマンス チューニングについてのポイント

http://blog.fenrir-inc.com/jp/2011/10/ios-animation-tuning.html

posted by satoko satoko on Fri 10 Feb 2012 at 15:06 with 0 comments

new BSDライセンスがついているものをアプリに組み込みたいなと思いましたので改めて調べてみました。
結論から言うと、

  1. EULAにLicense文書をそのまま入れる
  2. アプリ内にLicense文書を表示するwebViewを作る:設定やAboutなどで

の2つをするがベストな感じです。

###[参考1] @takuma104さんのブログ

NatsuLion for iPhone クローン (略) から学んだこととかまとめ - @takuma104 log
http://d.hatena.ne.jp/takuma104/20090329/1238329981

具体的には、

AppStore で配布する際の iPhone アプリで、New BSD License のコード等を使用する場合の適切な方法は、僕の考える限り、以下ぐらいの手法ではないかと思います。

  1. EULA に License 文書をそのまま入れる
  2. アプリのどこか、たとえば「設定」や「このアプリについて」とかに、License 文書を全文表示できるような仕組みを作る (webViewっぽいViewで組み入れているものも見かけますね)
  3. AppStore からリンクされているサポートページが事実上ドキュメントなので、そこに License 全文記載されているページへリンクする

###[参考2] 他のiPhone開発者の方々に聞いてみました
Twitterで聞いてみたところ、@azu_reさんが

@azu_re : @satoko 自分はアプリの設定あたりに"このアプリについて"みたいな感じのWebView作って、ライセンス文流し込みました
http://twitter.com/azu_re/status/132288479706095616

というtwtを下さいました。他にも実際にこういう手法を取っていらっしゃる開発者の方は何人かいらっしゃるようでした。

###[参考3] Instagramアプリでの表示例
ちなみに、Instagramアプリでは、Profileタブをタップ、右上Aboutをタップ、Libraries項をタップすると下記のように表示されます:
(なぜかとても見づらい状態で表示されていますがw)

licences.PNG

###[おまけ] EULAって何?

BSDライセンス絡みメモ:EULA ってなんですか? « 寺子屋サルでき旧館 | iPhoneアプリ開発をもっともっと楽しく!困ったらみんなで解決!
http://sarudeki.maiway.jp/forum/topic/37

Where is the iPhone app EULA displayed for the user?
http://stackoverflow.com/questions/1960338/where-is-the-iphone-app-eula-displayed-for-the-user

posted by satoko satoko on Fri 4 Nov 2011 at 17:47 with 0 comments
お陰様を持ちまして、iPhone/iPad向けアプリ「ハンドミラー」のダウンロード数が25万ダウンロードに到達しました :)
AppViz 2
Uploaded with Skitch!
最初のバージョンは10分で作ったアプリでしたが、多くの方々に使っていただいているのは感慨深いですね。 ずっと無料なので収益は無いですが、ランキングとダウンロード数の動向を把握するのに役だってます。 最新バージョンでは1クリックでズームイン・ズームアウトする機能がついております。ぜひお試しください。
posted by genki genki on Fri 30 Sep 2011 at 04:06 with 0 comments

Singletonを使う場面はよくあるんですが、iOS4以降はGrand Central Dispatchがあるのでそれのdispatch_onceを使う必要があるみたいで、メモ。

GCD 前:
rails>>

  • (MyController*)singleton {
    static MyController *controller = nil;

    if(!controller) {
    controller = [[MyController] alloc] init];
    }
    return controller;

}
<<--

GCD 後:

rails>>

  • (MyController*)singleton {
    static dispatch_once_t pred = 0;
    static MyController *controller = nil;

    dispatch_once(&pred, ^{
    controller = [[MyController alloc] init];
    });
    return controller;

}
<<--

Cocoa Fundamentals GuideのClass Factory Methods項の下のほーーーうにあるCreating a Singleton Instanceの説明もとても参考になります。これは読むべし:

Cocoa Fundamentals Guide
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW32

また、Apple Developer Forumsのこの質問もとても勉強になります:

Apple Developer Forums
https://devforums.apple.com/message/455002#455002

下記も参考

Singletons: You're doing them wrong
http://cocoasamurai.blogspot.com/2011/04/singletons-your-doing-them-wrong.html

posted by satoko satoko on Tue 28 Jun 2011 at 11:23 with 0 comments

iOS5、発表されましたね。
個人的には、焦っても仕方ないので、ぼちぼち練りながらニッチな所をやっていこうと思います。

さて、ハーバード大学 講座 「CS 193P iPhone Application Development」、以前資料が公開されて話題になったのですが、2010-2011 Fallの資料も公開されていたのでメモ。

2010-2011 Fall
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall

基本的な講義とともに、気になったのは下記の回:

  • Title: Lecture 8: Gesture Recognizers
  • Title: Lecture 13: Blocks and Multithreading
  • Title: Bonus Lecture: Accessibility

特に、8と13はこれからの基本かなと思うのと、アクセシビリティは障害者の方だけでなく、みんなで使えば新しいシンプルなUIができるのかなと想像するところもあって勉強したくなりました。

以前に話題になった講座資料も挙げておきます:

2009-2010 Winter
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter

【追記 2011.6.8 14:31】
@splhack さんにお勧めいただいたコンテンツを追記させて下さい。
Madison Area Technical College、すごいですね…advancedとあるだけに内容が楽しみです… :)

iOS5、発表されましたね。
個人的には、焦っても仕方ないので、ぼちぼち練りながらニッチな所をやっていこうと思います。

さて、ハーバード大学 講座 「CS 193P iPhone Application Development」、以前資料が公開されて話題になったのですが、2010-2011 Fallの資料も公開されていたのでメモ。

2010-2011 Fall
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall

基本的な講義とともに、気になったのは下記の回:

  • Title: Lecture 8: Gesture Recognizers
  • Title: Lecture 13: Blocks and Multithreading
  • Title: Bonus Lecture: Accessibility

特に、8と13はこれからの基本かなと思うのと、アクセシビリティは障害者の方だけでなく、みんなで使えば新しいシンプルなUIができるのかなと想像するところもあって勉強したくなりました。

以前に話題になった講座資料も挙げておきます:

2009-2010 Winter
http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter

【追記 2011.6.8 14:31】
@splhack さんにお勧めいただいたコンテンツを追記させて下さい。

@splhackさんのブログ:Grand Central Dispatchについての考察
http://tumblr.splhack.org/post/5662664642/grand-central-dispatch

Madison Area Technical College

  • Advanced iPhone Development - Fall 2010 - Madison Area Technical College

http://itunes.apple.com/us/itunes-u/advanced-iphone-development/id407243028

  • Advanced iPhone Development - Spring 2010 - Madison Area Technical College

http://itunes.apple.com/us/itunes-u/advanced-iphone-development/id407243032

posted by satoko satoko on Wed 8 Jun 2011 at 13:57 with 0 comments

Gestureメモ。扱われているRecognizerも挙げておく。

###Touches
コード内には二つプロジェクトがあって、Touches_GestureRecognizersがGestureのサンプルコード。指でviewを拡大・回転する。もう一方はUIResponderのサンプル。

  • UIRotationGestureRecognizer
  • UIPinchGestureRecognizer
  • UIPanGestureRecognizer
  • UILongPressGestureRecognizer

http://developer.apple.com/library/ios/#samplecode/Touches/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007435

###Table View Animations and Gestures
セルを指で広げるサンプルアプリ。

  • UIPinchGestureRecognizer

http://developer.apple.com/library/ios/#samplecode/TableViewUpdates/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010139

###SimpleGestureRecognizers

  • UITapGestureRecognizer
  • UISwipeGestureRecognizer

http://developer.apple.com/library/ios/#samplecode/SimpleGestureRecognizers/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009460

posted by satoko satoko on Wed 1 Jun 2011 at 14:20 with 0 comments

溶けたiPhone事件の後、新しいiPhoneにしてからエラーが出だしたのですが、これのお陰でバックアップが出来なくなってしまいました。
で、バックアップに失敗するので、iOSのアップデートにも失敗するという事になってしまい………ついに解決を目指す事に。

iOSのアップデート失敗時に下記を見るように指示されたので、Resolutionの項を一つ一つ試して行きます。

Update and restore alert messages on iPhone, iPad, and iPod touch
http://support.apple.com/kb/TS1275

でもだめです、解決しません。
アップデートをする際に、ステップの一部としてバックアップをするようになっているのですが、そこで失敗しているようです。

というわけで、まずはバックアップが成功するのを目指すことにしました。
ですが通常のバックアップも(ちゃんと)失敗して、下記のメッセージが表示されてしまいます…:

itunes_error_sync_services.png

iTunes was unable to load dataclass information from Sync Services. Reconnect or try again later.

メッセージ内容で検索してみたら下記が出てきました。
2008年7月の質問ですが、返信の中に「治ったー!」という報告がいくつかあったので試してみることに。

MacRumors Forums:"iTunes was unable to load dataclass information from Sync Services.... Jul 17, 2008, 03:42 AM
http://forums.macrumors.com/showthread.php?t=524354

回答として挙げられていたのは下記のリンク。

iTunes: How to remove and reinstall the Apple Mobile Device Service on Mac OS X
http://support.apple.com/kb/HT1747?viewlocale=en_US

下の方にある、OS XのApple Mobile Device Serviceを削除・再インストールする方法をやってみました。ざっくりと訳します。

###OS XのApple Mobile Device Serviceを削除・再インストールする方法

  1. iPhone、iPad、iPodをMacと繋がっているケーブルから外す

  2. FinderでApplicationsフォルダ内にあるiTunes.appファイルをごみ箱に捨てる。iTunesアイコンも捨てる。

  3. FinderのメニューでGo > Go to Folderを選択、下記を開く:
    /System/Library/Extensions

  4. AppleMobileDevice.kextファイルをごみ箱に捨てる

  5. FinderのメニューでGo > Go to Folderを選択、下記を開く:
    /Library/Receipts/

  6. ** AppleMobileDeviceSupport.pkg**ファイルをごみ箱に捨てる。認証ダイアログが出てきたら、administratorパスワードを入力する。
    注意:Mac OS X v10.6以降の場合は、このファイルがないかもしれない。その場合は次のステップへ。

  7. Macを再起動する

  8. FinderメニューでFinder > Empty Trashを選択、Macを再起動する。

  9. iTunesの最新版をダウンロード、再インストール。

  10. Macにデバイスを接続して、iTunesを開く

さてこの作業後、iPhoneを接続してみたら…みごとバックアップも成功、iOSも更新できました!

posted by satoko satoko on Wed 11 May 2011 at 06:09 with 1 comment

既存のiPhoneアプリをiPhone/iPad両対応の universal バイナリ化した場合、
iTunes Connect上でのstatusが"Missing Screenshot"になってしまうことがあるようです。

これはどうやら、全てのローカライゼーションに対してiPad用のscreenshotを少なくともひとつ設定すると解決する模様。
universal化した場合は、デフォルトの画像を自動的に全てのローカライゼーションに適用してくれないようなので、ローカライゼーションが多い場合は大変です。

posted by genki genki on Thu 30 Dec 2010 at 06:40 with 0 comments

アプリをアップロードしようとしたのですが、Xcode 3.2.5+SDK4.2のbuildで、Application Loader.app(Version 1.4 (92))でもdwarfdumpエラーが出ます:

The dwarfdump binary must exist and must be executable: /usr/bin/dwarfdump (-19036)

ネットを色々見たところ、Xcodeを再インストールなんていう解決策も見たのですが、それはちょっと…と思ったので、

iTunes ConnectのManage Your Applicationsの一番下段にあるドキュメント
Using Application Loader内に、Application Loader1.3へのdmgリンクがあったのでそれをインストール

https://itunesconnect.apple.com/apploader/ApplicationLoader_1.3.dmg

Application Loader
Version 1.3 (89)

Upload & 更新申請うまく行きました!
ちなみに、Xcode3.2.5についてくるApplication Loader.appのバージョンは下記でした:

Application Loader
Version 1.4 (92)

posted by satoko satoko on Mon 13 Dec 2010 at 03:16 with 1 comment
Fast App Switch周りをガリガリやっていたら、[@hkato193](http://twitter.com/hkato193)さんからメモリ警告絡みでアドバイスを頂きました。大変参考になったのでメモ。

@satoko ですので、メモリ警告が出てもデータ送信が継続できるようになっているか(ビューとかが捨てられるのは普通通りの対処でOK)、willTermiate(や時間切れハンドラ)で通信遮断やデータ送信失敗への対処が出来ているかがポイントです。Fri Nov 26 01:44:32 via YoruFukurou

つまり、Background突入時、ファイル送信などの処理をTask Completionでやる際に、 1. メモリ警告で送信処理を中止しない 2. 一方で、willTerminateやTask CompletionのExpirationHandler内で正しくキャンセル処理を行うこと: * 通信遮断 * データ送信失敗への対処(送信データの保存など) * ユーザへの通知 ###Task Completionとは Task Completion APIを使えば、Expiration handlerを使ってBackgroundで処理を行える: rails>> // WWDC 2010 Session 109 // Adopting Multitasking on iPhone OS, Part2 より引用 self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ [self prepareForSuspend]; [self pauseUpload]; }]; // returns after upload finishes or pauses [self uploadPhotos]; [app endBackgroundTask:self.bgTask]; <<-- 詳細の書き方については、BlockやらGrand Central Dispatchを理解する必要がありそうなのですが、なんとなく次が見えた感じです。
posted by satoko satoko on Thu 2 Dec 2010 at 15:41 with 0 comments

s21gとしてはこれまで無料アプリを出していなかったのですが、
どのぐらいダウンロードされるものなのか調べてみたいという意味もあって、
ハンドミラーアプリを作ってみました。

m

ハンドミラー(iTunes Store)

  • 開発期間:コーディング10分、アイコン1時間
  • プロモーション:無し

以下が発売後のDL数の推移です。

graph

コンスタントに250〜300DLぐらいされてます。
日本が97%。他はほとんどなし。文字列はアプリ名ぐらいしか無いので
、国による差異は余り無いと思ったのですが、不思議ですね。

posted by genki genki on Mon 27 Sep 2010 at 18:03 with 0 comments

project.pbxprojファイル内に各ターゲットに対するSDKROOTが二つあって混乱したのですが、プロジェクトとターゲット、別々にSDKROOTを持つようです。

project.pbxproj内の下記のコメント部分辺りを読むと、別々に設定があることがわかります:

/* Build configuration list for PBXNativeTarget …
/* Build configuration list for PBXProject …

色々見ていると、各ターゲットの設定がプロジェクトより優先されるようなんですが、Appleの資料(詳細は下の資料の参考3を参照)を見ると、

ターゲットごとにSDKを指定することもできますが、そのようにすると、プロジェクト全体に作用するようなSDK設定を使用している他のXcodeの機能の処理が妨げられる可能性があります

ということが書いてあって、結局はSDKの設定はプロジェクトもターゲットも同じ方が間違いがないかなと思いました。

###資料
参考1:

1つのプロジェクトに複数のターゲットを持てるので、ターゲットごとに設定ができるようターゲットの設定が優先されます。全ターゲット(1つの場合も)同じ設定で良いなら、プロジェクトの方だけ設定すれば良いです。 [twicco.jp @tucitter ] posted at 23:15:29
http://twilog.org/iphone_dev_jp/date-090328

参考2:

結論としては、プロジェクトとターゲット、別々に設定できるんだね。
project.pbxprojを直接読んでやって発覚。
http://denrinken.tsbps.com/diary/2009-10.html#2009-10-12b

参考3:

SDK設定がビルドにどのように影響するか

Important: Xcodeにおいて、プロジェクトに対するSDKを選択すると(“「クロス開発のためのプロジェクトの設定」”を参照)、選択したSDKは、プロジェクト内のすべてのターゲットに適用されます(すべてのターゲットが、指定したSDKのヘッダとライブラリを使ってビルドされます)。ターゲットごとにSDKを指定することもできますが、そのようにすると、プロジェクト全体に作用するようなSDK設定を使用している他のXcodeの機能の処理が妨げられる可能性があります。(略)
http://developer.apple.com/jp/documentation/DeveloperTools/Conceptual/cross_development/HowItWorks/chapter_2_section_7.html#//apple_ref/doc/uid/20002001-1105070

posted by satoko satoko on Wed 8 Sep 2010 at 03:27 with 0 comments

glGetError()がGL_INVALID_FRAMEBUFFER_OPERATION_OESを返した場合、
glCheckFramebufferStatusOES()で理由を確認できます。
返り値は以下のとおり。

pre>>
GL_FRAMEBUFFER_COMPLETE_OES 0x8CD5
GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES 0x8CD6
GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_OES 0x8CD7
GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_OES 0x8CD9
GL_FRAMEBUFFER_INCOMPLETE_FORMATS_OES 0x8CDA
GL_FRAMEBUFFER_UNSUPPORTED_OES 0x8CDD
GL_FRAMEBUFFER_BINDING_OES 0x8CA6
GL_RENDERBUFFER_BINDING_OES 0x8CA7
GL_MAX_RENDERBUFFER_SIZE_OES 0x84E8
GL_INVALID_FRAMEBUFFER_OPERATION_OES 0x0506
<<--

posted by genki genki on Mon 2 Aug 2010 at 22:35 with 0 comments

iPhoneアプリで凝ったアニメーションを作るとCALayerを多用するようになりますが、
いくつか現時点では欠けている点があるのでメモしておきます。

  • GLに比べて大分遅い。CALayerのレンダリングは内部的にGLを使っていないようですね。そのかわりアンチエイリアシングがキレイだったりします。
  • 3D transformがrenderInContextできない。ドキュメントでも少し触れられていますが、3Dのtransfromを設定しても renderInContextに反映されないです。
  • contentsをkey frameアニメーションさせる場合に、contentsの遅延読み込みが出来ない。そのため、イメージデータを全部メモリに読み込む必要があり、メモリ消費量が大きい。AVVideoCompositionCoreAnimationToolなどを使うときに困ることになります。

ちなみに、CALayerのcontentsプロパティは id 型の retain なんですが、CGImageRefを指定するとちゃんとCGImageRetainを呼んでいる様子。違和感があります。

posted by genki genki on Wed 28 Jul 2010 at 02:30 with 0 comments

iPhoneをLandscape状態にしたときの寸法をメモしておきます。

  • ナビゲーションバーの高さ: 32px
  • statusbar height: 20px
  • バーを除いた高さ 268px
posted by genki genki on Mon 19 Jul 2010 at 20:05 with 0 comments
iPhone開発アカウントをもう一個とろうとしてみたのですが、1法人につき1つまでという制限があるようです。
posted by genki genki on Tue 13 Jul 2010 at 18:33 with 0 comments

Release設定で、Code Signing IdentityAutomatic Profile Selectorを設定していて、Buildすると上記のようなエラーが出る様です。
どうやら、アイコンサイズ(57x57)やらチェックしてくれるOptionらしい。

###Project SettingsのBuild OptionsでValidate Build Productをチェック
"Project - Edit Project Settings - Build - Configuration(Release)"内にあるBuild Optionsの項です。これでwarningは出なくなります。

詳細はこちらから:

Xcode 3.2.2 Validate Built Product - Blog - Use Your Loaf
http://useyourloaf.com/blog/2010/4/3/xcode-322-validate-built-product.html

posted by satoko satoko on Tue 13 Jul 2010 at 06:04 with 0 comments

iPhone OS 4の対応をしていたら、小さなことにハマってしまったのでメモ。

###iPhone SimulatorでiPhone4表示が小さい(320x480)
Hardware - Device - iPhone4にしたのに、普通のiPhoneと同じ大きさで混乱していたら、**Window - Scale - 100%**にしたらちゃんと640x960で見れました。

###xCodeのBuild ResultsでCodeSignとProcessProductPackaging(embedded.mobileprovision)の詳細が見れない
各項目を右クリックExpand All Transcriptsで見る事ができます。

posted by satoko satoko on Fri 2 Jul 2010 at 05:09 with 0 comments

WWDC 10のビデオを見ているんですが、メモ。

Session 116 - Model-View-Controller for iPhone OS
https://deimos.apple.com/WebObjects/Core.woa/BrowsePrivately/adc.apple.com.4092349126.04109539109.4144345609?i=1812791157

Session116で出てきた、Object間でのやり取りの方法として3つ

  • Target - Action
  • Delegate
  • Notification

特に気になったのが後者の二つの違い。
下記Referenceによると、

  • Notification受信はいくつものObjectが受信することができる。対して、Delegateはdelegation objectのみ。また、Notificationは戻り値がない。
  • Notification受信側は、あらゆるmessageを受信することができるのに対し、Delegateは前もって宣言されたmethodsのみ。
  • Notification発信側は、受信者がいるかどうかは関知していない

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/Notifications/Articles/Notifications.html#//apple_ref/doc/uid/20000215-73929

Session116では、NotificationはBroadcast channelsと記述されていました。わかりやすい表現。

posted by satoko satoko on Fri 25 Jun 2010 at 22:17 with 0 comments

あるアプリでは「Target terminated too early to collect data」というエラーが出てLeaksを使ってのメモリ使用状況を見ることができないのに、別のアプリだとそのような状況は起きず困っていたのですが、解決したのでメモしておきます。

@k_katsumiさんからは下記のadhocでget-task-allowの値が問題かもというのと、オーガナイザで実機を再認識するのが良いというのをアドバイスを頂いたのですが、残念ながら解決しませんでした...

実機デバッグでの注意点
http://numata.designed.jp/ja/2009/03/iphone-5.html

実機でInstrumentsが使えなくなったときの対処法
http://d.hatena.ne.jp/iphone_dev/20080825/1219649967

それで、色々調べてまわったのですが、よい方法が見つからず困っていたところ

You are not running the application through Xcode when you do this. Start the application manually, then bring up Instruments and connect to your device.
http://stackoverflow.com/questions/2032834/memory-footprint-of-an-app-on-iphone

というコメントでした。この中ではActivity Monitorについての話だったのですが、Leaksも同じかも!と思ってぐぐったらありました!

Finding iPhone Memory Leaks: A “Leaks” Tool Tutorial
http://www.mobileorchard.com/find-iphone-memory-leaks-a-leaks-tool-tutorial/

上記の方法だと、xCodeは関係なく、iPhoneとInstrumentsでメモリ使用状況を見ることができます。yay!
多少、ステップが増えるのですが、出来ないよりは全然マシ!ということでよしとします。
(もしかしたら、同じapp名?のリリース版(購入したapp)とデバッグしようとしているappの二つあるのが原因なのかもですが...)

posted by satoko satoko on Mon 15 Mar 2010 at 08:25 with 0 comments

下記の続きです。

iPhone, Mac, ISO-2022-JP, 〜, 全角チルダとか波ダッシュについてのメモ
http://blog.s21g.com/articles/1693

あと、この記事も関係するかも:[iPhone] メール送信アプリでのツボ

結局何が書きたかったかというと、

「全角チルダ」がdataUsingEncoding:NSISO2022JPStringEncodingで「?」に置き換えられるので、何らかの回避策を探そう!…探しました!

という報告です。

###〜の入力方法二つ
以前に書いた記事で、Macでは全角チルダと波ダッシュは同じに見えるらしいことがわかりましたが、iPhoneでも同様のようです。
で、日本語キーボードで「〜」を入力する方法は二通りあります:

  1. あいうキーボードで、わの所を右にフリック、次候補中にある〜を選択
    → 全角チルダ

  2. 数字キーボードで、0の所を左にフリック
    → 波ダッシュ

###dataUsingEncoding:NSISO2022JPStringEncodingで波ダッシュだと?にされない、〜のまま

全角チルダ(〜) → ?
波ダッシュ(〜) → 〜

という風に置換されることがわかりました。

大方のユーザにとっては全角チルダを波ダッシュに変換しても問題がなさそうなので、アプリ内では下記のように変換することにしました。
rails>>
unichar wave_dash_char = 0x301C;
unichar fullwidth_tilde_char = 0xFF5E;
NSString *wave_dash = [NSString stringWithFormat:@"%C", wave_dash_char];
NSString *fullwidth_tilde = [NSString stringWithFormat:@"%C", fullwidth_tilde_char];

NSString *replacedStr = [str stringByReplacingOccurrencesOfString:fullwidth_tilde withString:wave_dash];

<<--

またポンドとセントでも同じような状況が発生するので、同様の処理を行うようにしました。
rails>>
unichar pond_char = 0x00A3;
unichar cent_char = 0x00A2;
unichar pond_char2 = 0xFFE1; //?になるポンド
unichar cent_char2 = 0xFFE0; //?になるセント
<<--

posted by satoko satoko on Wed 10 Feb 2010 at 07:32 with 0 comments

備忘録。ezPhotoMail、地味にバージョンアップしているのですが、Verion Numberではまってしまいました。

@takayamaさんや@sumihiroさんに有益なアドバイス頂きました。感謝!

###バージョンは1桁ずつ「.」で区切るのが吉:1.5.5

1.5.5

じゃないかという@sumihiroさんのアドバイス。1.55とかにすると、1.6に上げようとすると、「前のバージョンより高いバージョンをNSBundleに記述してください」という旨のエラーメッセージが出てしまうのです。

または、下記のように60と0を足すのも多分大丈夫じゃないかという@takayamaさんのアドバイス。確かに運用で「下位桁は必ず二桁で」などとするのもいいかもしれません。

1.60

###1.5.5aなどの変則バージョンもOK
1.5.5aを公開しておいて、その後1.5.5bというのも可能だそうで、このパターン、@takayamaさんは実際に使われたことがあるそうです。

1.5.5a -> 1.5.5b

というわけで、次のezPhotoMailのバージョンは1.6にしたかったのですが、混乱してしまったので1.56で申請しています…

posted by satoko satoko on Mon 8 Feb 2010 at 08:13 with 0 comments

subviewはsuperviewのalphaを引き継いでしまう。たぶん。親のalphaが0.7で子が0.5の場合は0.7*0.5で子は0.35のalphaになる?
背景スケスケでコンテンツはクッキリ表示したい場合はどうすればいいか?と言うと、もう一つalpha 1.0のUIViewを用意し、そのviewをsuperviewにして子にaplha 0.7のbackground viewとalpha 1.0のcontens viewを加えればいい。

つまり最初のviewの構成が

ruby>>
UIView alpha 0.7
 UIView alpha 1.0 contens view
<<--
となっているところを
ruby>>
UIView alpha 1.0
 UIView alpha 0.7 background view
 UIView alpha 1.0 contents view
<<--
とする。

解決法がタイトルは嘘にしてしまったが、やりたい事はコレで実現できる。もちろんbackgournd viewを本来のあるべきサイズにしなきゃいけないけどね。

posted by bopper bopper on Sat 6 Feb 2010 at 20:20 with 0 comments

at iPhoneOS 3.1.2

shouldAutorotateToInterfaceOrientationじゃなくて任意のタイミングで
roateする方法を探していたんだけど、見かけるのはUIViewのtransformでrotateすることばかり。確かめてないけど。この方法だとUIViewControllerのinterfaceOrientationと齟齬も発生するじゃないかと思う。

それで無理くり何とかする方法を考案した。けど、この方法では(もう少し改善すればできるかもしれないが)重力方向への回転しかできない。
shouldAutorotateToInterfaceOrientation:を使ってrotateすのはいつもとどおり。だけど先に方向を決めておいてNSNotificationを投げて強制的にshouldAutorotateToInterfaceOrientation:を発生させることによって
任意のタイミングでviewを回転させる事ができる。

objective-c>>

  • (void)rotateNow{
    UIDevice *device = [UIDevice currentDevice];
    self.toRotate = device.orientation;
    NSNotification *notification = [NSNotification notificationWithName:@"UIDeviceOrientationDidChangeNotification" object:device];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
    }

  • (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    if(self.toRotate){
    return interfaceOrient == self.toRotate;
    }else{
    return NO;
    }
    }
    <<--

こんな感じ。何をしたかったかと言うと向きが変わったときにいきなり回転させるんじゃなくて、ちょっとボタンをだして確認を取りたかった。だからタイミングだけずらして回転方向は重力方向だけでいいやって話しなんだけど。

もしかすると、このNSNotificationを作ってる部分でobject:deviceってUIDeviceを渡してる部分。このオブジェクトのプロパティorientationを任意の方向を返す様なオブジェクトを作ってViewControllerを更に騙すことができるならば、タイミングだけじゃなくて方向も変えれるんじゃないかな?そこまでは確認を取ってません。

まぁ何にせよ。かなりhackな方法だからOSのバージョン上がったら使えなくなるかもしれない。

posted by bopper bopper on Sun 31 Jan 2010 at 14:04 with 0 comments

もう何日も悩んだので、メモしておきます。
読み方から勉強しましたです。

###MacとWindowsで見え方が異なる

「~」と「〜」。同じに見えるだろうか。Macからは同じに見えるが、Windowsからは違って見えるかもしれない。前者のは全角チルダ、後者は波ダッシュ、Unicodeでは異なる文字として扱われている。

Macの"Mail" 「波ダッシュ」への対応(その1 背景)
http://toshiohattori.blogspot.com/2009/10/macmail-1.html

その他の参考:その他の「Macの"Mail" 「波ダッシュ」への対応」
その2
その3
その4

###wikipedia 全角チルダの項
Unicodeは下記:

0x301C 波ダッシュ wave dash
0xFF5E 全角チルダ fullwidth tilde

via http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%AB%E3%83%80#.E5.85.A8.E8.A7.92.E3.83.81.E3.83.AB.E3.83.80

###10進、16進、HTML内での表記
波ダッシュ「〜」
&#12316; (10進表記)
&#x301C; (16進表記)

全角チルダ「~」
&#65374; (10進表記)
&#xFF5E; (16進表記)

via http://blog.magical-remix.net/cssclips/archives/86

###Unicode版 文字コード表
http://www.m-hoz.com/jsp/unicode.jsp?Bgn=0&End=65536

###文字コード:ISO-2022-JP

charset=ISO-2022-JP
半角カナを除くJISコードの日本語文字セット
実際には、半角カナが入っている場合もある
http://ash.jp/code/code.htm

###RubyでUnicodeから文字を得る方法
shell>>
[0x3000].pack("U")
<<--
via http://blog.s21g.com/articles/1454

posted by satoko satoko on Fri 22 Jan 2010 at 18:13 with 0 comments

ABMultiValueCopyValueAtIndexの二つ目にいつもidentfierを渡したんですが、バグてました。メモメモ。
ABMultiValueGetIndexForIdentifierでidentifierをindexに直してやる必要があります。

rails>>

  • (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {

    CFTypeRef list;
    CFIndex index;
    CFStringRef email;

    list = ABRecordCopyValue(person, property);
    index = ABMultiValueGetIndexForIdentifier(list, identifier);
    email = ABMultiValueCopyValueAtIndex(list, index);
    (中略)

    CFRelease(email);
    CFRelease(list);

<<--
via http://stackoverflow.com/questions/1875135/get-email-address-from-iphone-address-book

posted by satoko satoko on Fri 22 Jan 2010 at 16:15 with 0 comments

メモメモ。

答えはFAQにあります:

iTunes Connect:Frequently Asked Questions > Manage Your Applications
What happens if I want to start selling an application I removed from sale again? Can I make it live in the App Store again?
https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/4.0.0.5.1.7.1.1.1.1

ざっくり訳すと:

  1. アプリの「Edit Imformation」ボタンを押す
  2. 「Pricing」タブを表示(どのApp Storeも選択されていない状態)
  3. 販売したいApp Storeを選択する
  4. 「Save Changes」ボタンを押す
posted by satoko satoko on Fri 15 Jan 2010 at 07:22 with 0 comments

###メール送信時、長い件名の場合は複数行に分割する

RFC2047によれば、「76文字以内で」複数行に分割すべき
http://www.securehtml.jp/utf-8/long_subject.html

全然知らなかったのですが、分割する必要があるそうです。

###全角チルダ(〜)などはdataUsingEncoding:NSISO2022JPStringEncodingで変換できない
NSStringの下記の関数を使って、ISO-2202-JPの文字列を作るのですが、全角チルダ(〜)などがあるとnilが返ってきてしまいます:

  • (NSData *)dataUsingEncoding:(NSStringEncoding)encoding

そういう場合はallowLossyConversion:YESにして、該当の文字を「?」で置き換える必要があります:

  • (NSData *)dataUsingEncoding:(NSStringEncoding)encoding allowLossyConversion:(BOOL)flag

###その他
色々調べている間に便利そうだったサイト。メモメモ。

Convert NSData to NSString or vise versa:
http://homepage.mac.com/mnishikata/objective-c_memo/convert_nsdata_to_nsstring_.html

特殊記号の読み方:
http://www1.odn.ne.jp/haru/data-list/mark.html

Unicode版 文字コード表:
http://www.m-hoz.com/jsp/unicode.jsp?Bgn=0&End=65536

NSString encoding problem with extended characters ( AKA : converting NSString to std::string)
http://lists.apple.com/archives/Syncservices-dev/2007/Mar/msg00020.html

[Perl]Perlで日本語(ISO-2022-JP)メールを送信(まとめ):
http://d.hatena.ne.jp/kopug/20060903

posted by satoko satoko on Mon 26 Oct 2009 at 06:02 with 0 comments

お待たせいたしました。

アップデート申請が通り、本日よりiTunesストアにて地価2009バージョン1.1の配信が開始しました。

今回のアップデート内容は以下の通りです。

  • 土地取引データの増強と刷新
  • iPod touchに対応
  • 地価表示単位の切り替え(平米単価/坪単価)
  • Twitter投稿機能
  • UIの改善

土地取引データについては、従来の3倍に増強し、都市部以外での地価推定精度を向上させました。また、都市部での取引データについても新しい情報に更新しました(全体的に値下がり傾向となっています)

See Also

posted by genki genki on Fri 2 Oct 2009 at 23:31 with 0 comments

iPhoneのアプリを作っていると、様々なframeworkを使う場面に出くわします。その際に、色々なインストールの仕方があるようなので、メモしておきます。

via http://code.google.com/p/json-framework/wiki/InstallationInstructions#Option_1:_Copy_the_JSON_source_files_into_your_project

###その前にメモ

  • 方法によってステップ3でJSON.hのimport方法が違います。
  • 方法3で、"Copy Files"フェーズができるのですが、DestinationがFrameworks、Products Directoryでどれがいいかよくわかってないです。Buildは通ってもエミュレータで動かないときとかあります。

###方法1:ソースをプロジェクトにまるごとコピーする

  1. ソースが含まれているフォルダを追加したいプロジェクトのClassesグループにドロップ
  2. 'Copy items into destination group's folder' オプションをチェック
  3. コード内で #import "JSON.h"などと書いて使う

###方法2:iPhoneカスタムSDKを使う
なんかあんまりないかなと思って割愛w

###方法3:埋め込みフレームワークを使う

  1. ~/Library/Frameworksディレクトリを作成
  2. JSON.frameworkファイルを上で用意したディレクトリにコピーする
  3. "Add existing file"メニューを選んで、~/Library/Frameworks/JSON.frameworkファイルをアプリケーションに追加する
  4. ターゲットを選択、右クリックして"Add - New Build Phase - New Copy Files Build Phase"メニューを選択
  5. コード内で #import <JSON/JSON.h>などと書いて使う
posted by satoko satoko on Mon 28 Sep 2009 at 07:08 with 0 comments
前回のアップデート申請がリジェクトされてしまったので、問題を解決して再度申請いたしました。 すでにご購入いただいた方々には申し訳ありませんが、もう少しだけお待たせする事になってしまいそうです。 今回のアップデート内容は以下のようになっております。 * データを3倍に増強(当社比) * 平米単価/坪単価の表示切り替え * iPod touch対応 * Twitter連携機能 * UIの改良 最新のデータに更新したため、最近の景気動向を反映して全体的に地価が下落しています。 それでは、今後ともよろしくお願いいたします。 ** See Also ** * [地価2009](http://www.s21g.com/services/10)
posted by genki genki on Thu 24 Sep 2009 at 00:06 with 0 comments

imagePin.png

前回の続き:

[iPhone] Map Kitで遊ぼう:地図を出して現在位置にピンを立てる
http://blog.s21g.com/articles/1596

参考:

Drawing polyines or routes on a MKMapView (as an MKAnnotationView) – Part 2
http://spitzkoff.com/craig/?p=108

###MKAnnotationを実装するクラスを作成
MyAnnotation.h
rails>>
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotation : NSObject {
CLLocationCoordinate2D _coordinate;
}

@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;

-(id)initWithCoordinate:(CLLocationCoordinate2D) coordinate;

@end
<<--

MyAnnotation.m
rails>>
#import "MyAnnotation.h"

@implementation MyAnnotation

@synthesize coordinate=_coordinate;

-(id)initWithCoordinate:(CLLocationCoordinate2D) c{
_coordinate=c;
return self;
}

@end
<<--

###ViewControllerでMKMapViewDelegateを実装
ポイントとしては

  • .hでMKMapViewDelegateを実装宣言
  • _mapView.delegate = self;
  • -(MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )annotationを実装
  • MyAnnotationなら画像を設定する:
    if([annotation isKindOfClass:[MyAnnotation class]]) {
    annotationView.image = [UIImage imageNamed:@"some.png"];

本当はMKAnnotationViewを派生して、MyAnnotationViewを作るのがベターなんですけど省略しています。

MapTutorialViewController.h
rails>>
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface MapTutorialViewController : UIViewController {
MKMapView *_mapView;
}
@end
<<--

MapTutorialViewController.m
rails>>
#pragma mark MKMapViewDelegate

  • (MKAnnotationView *)mapView:(MKMapView )mapView viewForAnnotation:(id )annotation{
    MKAnnotationView annotationView;
    NSString
    identifier = @"Pin";
    annotationView = (MKPinAnnotationView
    )[_mapView dequeueReusableAnnotationViewWithIdentifier:identifier];
    if(nil == annotationView) {
    annotationView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:identifier] autorelease];
    }
    if([annotation isKindOfClass:[MyAnnotation class]]) {
    annotationView.image = [UIImage imageNamed:@"some.png"]; //地図に表示したい画像を設定
    }
    return annotationView;
    }

  • (void)addSomeAnnotations {
    //a location
    double latitude = 37.331688999999997;
    double longitude = -122.030731;
    CLLocationCoordinate2D _location;
    _location.latitude = latitude;
    _location.longitude = longitude;

    CLLocationCoordinate2D location1;
    MyAnnotation *annotation;

    location1.latitude = _location.latitude+0.1;
    location1.longitude = _location.longitude+0.1;
    annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
    [_mapView addAnnotation:annotation];

    location1.latitude = _location.latitude+0.5;
    location1.longitude = _location.longitude+0.5;
    annotation =[[MyAnnotation alloc] initWithCoordinate:location1];
    [_mapView addAnnotation:annotation];

}

  • (void)viewDidLoad {
    [super viewDidLoad];

    _mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    _mapView.showsUserLocation=TRUE;
    _mapView.delegate = self;
    [self.view addSubview:_mapView];

    [self addSomeAnnotations];

}

<<--

posted by satoko satoko on Wed 9 Sep 2009 at 02:22 with 0 comments

まずは地図を表示して、現在位置にピンを立てるところまで。
MKMap-1.png

via

http://blog.objectgraph.com/index.php/2009/04/02/iphone-sdk-30-playing-with-map-kit/

###MapKit.frameworkを追加する
MapKit.png

###Controller.hでMapKit/MapKit.hをImport
MapKit/MapKit.hをImportして、MKMapViewをプロパティに持つ:
rails>>
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>

@interface MapTutorialViewController : UIViewController {
MKMapView *_mapView;
}

@end
<<--

###Controller.mでMKMapViewを初期化
showsUserLocationをTRUEにすることで、現在の居場所にピンを立ててくれる。

rails>>

  • (void)viewDidLoad {
    [super viewDidLoad];

    _mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
    _mapView.showsUserLocation=TRUE;
    [self.view addSubview:_mapView];

<<--

実機でやると、地図は出るが現在位置に近い地図でないので??ですが、それはまた次で。

posted by satoko satoko on Thu 3 Sep 2009 at 16:37 with 0 comments

http://www.mobileorchard.com/category/screencasts

MobileOrchardさんが行っている有料のクラスでのスクリーンキャストを1週間だけ無料で公開するそうです。その後は有料。
RSSでチェック!又は@MobileOrchardをfollowですね。

ちなみに第1回目は「Screencast: iPhone Provisioning: Running Development Code On Your Phone」開発したコードをiPhone上で動かすという内容です。URLは下記:

http://www.mobileorchard.com/iphone-development-provisioning/

posted by satoko satoko on Wed 26 Aug 2009 at 19:09 with 0 comments

via

http://forums.macrumors.com/showthread.php?t=570789

メモメモ。アプリの雰囲気に合うようなstatusBarを設定できるとおしゃれですよね...

###Info.plist
Info.plist内でこういう風に設定すればOK:

rails>>
UIStatusBarStyle
UIStatusBarStyleBlackOpaque
<<--

posted by satoko satoko on Wed 26 Aug 2009 at 18:57 with 0 comments

ご愛顧いただきありがとうございます。
おかげさまを持ちまして、ついにビジネスカテゴリの有料アプリランキング1位になることができました。

ss1

地価2009
では、高速で継ぎ目の無い地価の推定のために
映画制作などで使われている最先端のCGのレンダリング技術を応用しています。
そのため、大量のデータをもとに瞬時に地価を推定する事が可能となっています。

弊社では
iPhoneアプリの受注制作
や共同開発も行っておりますので、
緯度経度や住所等、位置情報にひもづいたデータをお持ちで、iPhoneアプリの制作に関心をお持ちであれば、ぜひ
mail までご連絡ください。

地価2009の今後の開発計画といたしましては、

  • ㎡/畳(京間)/畳(江戸間)の表示切り替え
  • データの増強
  • UIの改善

などを行っていく予定です。

また、地価2010のスケジュールについてもお問い合わせを頂いておりますが、地価2010の販売を行う場合、地価2009をご購入いただいた方々には2010年のデータを無償アップデートにてご提供させて頂く予定です。

posted by genki genki on Mon 24 Aug 2009 at 16:14 with 0 comments

このたび弊社からリリースいたしましたiPhoneアプリの"地価2009"が
ビジネスカテゴリで有料アプリランキングの4位にランクインしました。
ありがとうございます!

ss1

地価2009は、iPhone 3.0から利用可能になったMapKit(地図を使ったアプリケーションを簡単に作れる仕組み)を利用して、日本中どこでも好きな場所の地価を調べる事ができるアプリケーションです。

ss2

経営者の方、不動産業の方、土地の購入を検討されている方など、地価に興味のある方にお勧めです。

See Also

posted by genki genki on Sun 23 Aug 2009 at 15:24 with 0 comments

iPhoneに限った話ではないのですが。メモ:

via
http://discussions.apple.com/thread.jspa?messageID=8157595

###CGRect → NSValue

CGRect rect = CGRectMake(x,y,w,h);
NSValue *rectValue = [NSValue valueWithCGRect:rect];

###NSValue → CGRect

CGRect rect = [someNSValue CGRectValue];

posted by satoko satoko on Wed 12 Aug 2009 at 22:19 with 0 comments

調べてわかったのですが、複数パラメータを持つメソッドのSELは作成できるのですが(下記)、UIButtonなどのtarget-action設定時にパラメータを渡す事はできないようです。

-(void)methodWithNoArguments;
SEL noArgumentSelector = @selector(methodWithNoArguments);

-(void)methodWithOneArgument:(id)argument;
SEL oneArgumentSelector = @selector(methodWithOneArgument:); // notice the colon here

-(void)methodWIthTwoArguments:(id)argumentOne and:(id)argumentTwo;
SEL twoArgumentSelector = @selector(methodWithTwoArguments:and:); // notice the argument names are omitted

ちなみに、自分でSELのメソッドを呼び出すときには、パラメータを渡す事は可能:

-performSelector:
-performSelector:withObject:
-performSelector:withObject:withObject:

###senderでごにょごにょ
できないと言っても、if(sender == _myButton) {} とか sender.tag をうまく使って、誰が呼出し元かや、intを渡す事は可能なようです。

###Refs

  • How do SEL and @select work in iphone sdk?

http://stackoverflow.com/questions/297680/how-do-sel-and-select-work-in-iphone-sdk

  • How to I pass @selector as a parameter?

http://stackoverflow.com/questions/932801/how-to-i-pass-selector-as-a-parameter

  • Help me understand selector

http://www.cocos2d-iphone.org/forum/topic/844

  • AppleのドキュメントのSelectors項

http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocSelectors.html#//apple_ref/doc/uid/TP30001163-CH23-SW4

posted by satoko satoko on Wed 12 Aug 2009 at 20:53 with 0 comments

Can't exec "xcodebuild": No such file or directory at /opt/local/bin/scan-build line 830.

いつの間にかscan-buildでエラーが出るようになってしまったみたいで、ちょっと困りました。解決したので、自分用にメモ。

###"xcodebuild"はXcodeのコマンドラインツール
scan-buildは悪くないらしい...というので考えたら、少し前に古いverのXcodeを削除してしまったので、最新のxcodebuildが$PATHに通っていないのが原因ぽい。

「xcodebuild」は、Xcodeで作成されたプロジェクトをコンパイルするコマンドラインツールだ
http://slashdot.jp/~hylom/journal/459704

で .zshrcに新しいxcodebuildへのPathを追加

shell>>
export PATH=/Developer3.1b2/usr/bin:$PATH
<<--

するとscan-buildが無事できるようになりました!
で、いつものようにscan-build xcodebuildをやってみたのだけれど、またエラー:

shell>>
scan-build xcodebuild
=== BUILDING NATIVE TARGET ShoppingList OF PROJECT ShoppingList WITH THE DEFAULT CONFIGURATION (Release) ===

Checking Dependencies...
2009-08-05 06:00:35.063 xcodebuild[5232:10b] _XCDistributedBuildHostInfoTask encountered an error: Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x36ebf70 "Operation could not be completed. No such file or directory"
error: There is no SDK with the name or path 'iphoneos2.2'
** BUILD FAILED **
<<--

引数なしでscan-buildすると、プロジェクトで設定されているiPhone OS2.2を選択してbuildしようとしてエラーになっているみたいです。

###scan-buildの-sdkオプション

scan-build -k -V xcodebuild -configuration Debug -sdk iphonesimulor2.2.1
http://studiot.jp/blog/?p=64

上を参考に-sdkオプションを適用してやると:

shell>>
scan-build xcodebuild -sdk iphoneos2.2.1
<<--

大量のエラーぽいものを出しながらビルド成功+バグなし。
怪しいので3.0にしてみたらエラーも出なくて、ちゃんとバグを発見してくれました:

shell>>
scan-build xcodebuild -sdk iphoneos3.0
<<--

posted by satoko satoko on Tue 4 Aug 2009 at 21:55 with 0 comments

@masuidriveさんのtwtに反応したら、お返しに?良い情報を頂いたのでメモ。

RT:"iPhoneでgrowl見たいな通知方法のコード持ってる人いませんかー。なかったら自分で書いてみようかと。" - @masuidrive
http://twitter.com/masuidrive/status/2692244331

@hitoriblogさんのtwtをRT:

@masuidrive さん 、これどうかしら。遅レスですが RT @hitoriblog: KennyTM~卿すごすぎです。Growl for iPhone "GriP" http://code.google.com/p/networkpx/wiki/GriP
http://twitter.com/satoko/status/2695054305

@guneさんとJB必須だねという話になっていたところ...

RT:"@satoko @gnue ああ、これはアプリに組み込むならJB要らないんですよ。前にGriPも見つけてたんですが、そのときは私もJB必須だと思ってました。" - @masuidrive
http://twitter.com/masuidrive/status/2700301480

そして補足も頂きました!:

RT:"@satoko アプリの中で使うと、Viewの間をまたいで通知できるので良い感じですよ。組み込みも簡単で。" - @masuidrive
http://twitter.com/masuidrive/status/2705002202

posted by satoko satoko on Sat 18 Jul 2009 at 16:19 with 0 comments

Trying to install my app to iPhone 2.2.1, but it fail with following message:
Cantinstallapp.jpg

The Info.plist for application at /Users/satoko/repos/ezPhotoMail/build/Debug-iphoneos/ezPhotoMail.app specifies a minimum OS version of 3.0, which is too hight to be installed on satoko の iPhone

###Check the Base SDK in target
If "Base SDK" is set to "iPhone Device 3.0", it could no be installed to iPhone 2.2.1 or former. But My target's "Base SDK" was OK.

###Two target, two Info.plist
Then suddenly my instincts tells me: Wait, there's another *.plist file for second target!

Well, there's two targets in this project: currently selected target's Base SDK is "iPhone Device 2.2.1" , the other one's is "iPhone Device 3.0".

Maybe that's the problem, I thought. Here's my action:

  1. I deleted below:
  • second-target
  • second-Info.plist(used in second-target)
  1. Then clean up caches:
  • Clear target
  • Close the project
  • delete build directory
  1. re-open the project and build/run with my iPhone 2.2.1...
  2. Voila! It worked!
posted by hibi hibi on Fri 19 Jun 2009 at 07:32 with 0 comments

こういう感じのメッセージが出ます(グレーで見にくいですが):
Picture 9.png
profile doesn't match any valid certificate/private key pair in the default keychain

###Keychain AccessでDefaultのkeychainを確認
Xcodeが検索するkeychainが、iPhone Developerの証明書が入っているkeychainと違っていることが原因が多いらしい(下記リンク)。
なのでKeychain Accessでデフォルトのkeychainをlogin(iPhone Developerの証明書が入っているkeychain)にする(私の場合は正しくなってました)

###その他試した事

  • iPhone Developer証明書を再発行
  • 新しいAppIDを用意
  • 新しいprovistioningを用意

これ全部やってもだめだった...

###iPhone SDK 3.0 GM SeedのXcodeを再インストール
次の日Xcodeを削除して、SDKを再度ダウンロード、インストールしてみました。→ まだ、同じメッセージがでます。
で、やったこと:

  • 再度iPhone Developer証明書を再発行して、Keychain Accessに
  • 使えなくなったprovisioningをModifiedで再度自分と動作確認に使うiPhoneを選択
  • Xcodeと3.0 GM SeedのiPhoneにprovisioningをインストール

正しく動作するようになった!! Yay!

posted by satoko satoko on Wed 17 Jun 2009 at 07:24 with 0 comments

実際に使った事はないのですが、未来のためにメモ。

開発機のクラッシュログは読めたのですが、そうでない場合は下記のリンクにあるようにすれば読めるらしいです。

posted by satoko satoko on Thu 11 Jun 2009 at 02:38 with 0 comments

UIImageJPEGRepresentationのcompressionQualityを0.0にするとどれくらい圧縮されるかのテスト:

  • 3.3MBのファイル => 804KB
  • 1.5MB(1600x1200) => 116KB

ファイルによって違うでしょうが参考までに。
下記にテストに使ったファイルを挙げておきます。

###3Mの画像ファイル
オリジナルのサイズ:5354x3570、3.3MB
joi_3m_small.jpg
photo by Joi

###iPhoneで取った1600x1200のファイル
1600x1200、1.5MB
1200x1600.jpg

posted by satoko satoko on Fri 5 Jun 2009 at 06:31 with 0 comments

なんか忘れて探したのでメモ:

shell>>
/Users/satoko/Library/Application Support/iPhone Simulator/User/Media/DCIM/100APPLE
<<--

posted by satoko satoko on Fri 5 Jun 2009 at 04:26 with 0 comments

実機でLeaksを使ってメモりリークのテストをしていたのですが、どうもUICachedDeviceWhiteColorが倒せない...という状況になってしまい、ぐぐってみたら下記にあたりました:

Topic : [iPhone] UICachedDeviceWhiteColor showing as memory leak in Leaks

I had similar problem. After lots of trial-and-error I figured out that "Info Light" button - which was added using IB - on my navigation bar's right bar button item caused this.

So I removed "Info Light" button from XIB and create it programmatically, and then the UICachedDeviceWhiteColor is finally disappeared.

http://discussions.apple.com/thread.jspa?messageID=9368037&tstart=0

これによると、XIBを使って"Info Light"を配置していると、このリークが発生するということで、対応としてXIBから削除、code中から配置するようにしたら、リークが解消されたということでした。

私のXIBではRound Rect Buttonを"Add Contact"タイプにして配置しており、それが原因だったようです。

posted by satoko satoko on Mon 18 May 2009 at 01:28 with 0 comments

アプリをリリースするとき、日付はとても大事です。
(プレスリリースなどに関係するし)

Shopping Pinkをリリースしようとした際、iTunes ConnectにあるAvailability Dateについての詳しい情報があまりなくちょっと困りました。で、その時の経験でわかったのは、

その国のローカル時間でStoreに出される(ようだ)

Availability Dateを4/20にすると、日本のStoreには4/20、USのStoreにはUS時間の4/20ということです。日本だと時差がないので、全国同時ですが、USとかだとどうなるのかしら?ちょっとそこまではわかりませんでした。

posted by satoko satoko on Mon 20 Apr 2009 at 10:21 with 0 comments