• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
 

プリプロセッサ マクロとかコンパイラ フラグとか苦手です。
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 Png satoko on Tue 18 Sep 2012 at 15:19

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

   1  print (CGRect) [myView frame]  
   2  print (CGSize) [myView frame].size  
   3  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です:

   1  p (CGRect)[view frame]

  • p:print
  • po:print object

これでおしまい

posted by Png satoko on Wed 15 Feb 2012 at 14:10

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

※ 要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 Png satoko on Fri 10 Feb 2012 at 15:04

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 Png satoko on Fri 4 Nov 2011 at 17:46

Quoted from:

UIViewController Class Reference
http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/c_ref/UIViewController

Example of container view controllers:

  • UINavigationController
  • UITabBarController

To implement a Container View Controller

Subclass UIViewController that call the view containment methods:

  • addChildViewController:
  • removeFromParentViewController
  • transitionFromViewController:toViewController:duration:options:animations:completion:
  • willMoveToParentViewController:
  • didMoveToParentViewController:

Using containment methods in UINavigationController

pushViewController:animated calls:

  • addChildViewController
  • transitionFromViewController:toViewController:duration:options:animations:completion:

popViewControllerAnimated calls:

  • removeFromParentViewController
  • transitionFromViewController:toViewController:duration:options:animations:completion:
posted by Png satoko on Fri 28 Oct 2011 at 10:37

また忘れたのでメモ。
NSIndexPath UIKit Additions というタイトルでiOS 4.3 Libraryに登録されています。

+ (NSIndexPath *)indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section

コードにこんな感じで:

   1      NSIndexPath* indexPath = [NSIndexPath indexPathForRow:0 inSection:0];  

posted by Png satoko on Thu 8 Sep 2011 at 17:07

どこが違うのか気になったのでメモ。 Window-based ApplicationをView-based Applicationと同じところまで持っていく作業を書き出してみます。

※ Xcode 4.1で動作確認しています。

Window-based Applicationを作成

RootViewControllerを作成

File - New - New FileでUIViewControllerテンプレートを選び、RootViewController(.h, .m, .xib)を作成する

Interface Builderで作業

MainWindow.xibを開く
View - Utilities - Show Object Library を開いて、

  1. View ControllerをDrag & Drop

View - Utilities - Show Identity Inspector を開いて、

  1. 先にDropしたView Controllerを選択
  2. Custom ClassのClassをRootViewControllerに
  3. (LabelをRoot View Controllerに)

View - Utilities - Show Attributes Inspector を開いて、

  1. View ControllerのNIB NameをRootViewControllerに

View - Assistant Editor - Show Assistant Editor を開いて、

  1. AppDelegateクラス(h)を開く
  2. IB上でoptionキーを押しながらRoot View Controllerを選択、(hファイル上まで)DragしてInsert Outlet Connectionを追加(Name:viewController)

下記のようにコード生成されます:

   1  @interface RootViewControllerProtoAppDelegate : NSObject <UIApplicationDelegate> {
   2      RootViewController *_viewController;
   3  }
   4  
   5  
   6  @property (nonatomic, retain) IBOutlet UIWindow *window;
   7  @property (nonatomic, retain) IBOutlet RootViewController *viewController;

エディタでの作業

AppDelegateクラスのhで、@classを追加:

   1  @class RootViewController;

AppDelegateクラスのmで、#import、さらにself.viewControllerをself.window.rootViewController

   1  #import "RootViewController.h"
   2  
   3  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
   4  {
   5      // Override point for customization after application launch.
   6      self.window.rootViewController = self.viewController;
   7      [self.window makeKeyAndVisible];
   8      return YES;
   9  }

厳密に言うと、View-based ApplicationではviewControllerの宣言のされ方が若干違います。そこは各自確認下さいませ。。
作業をしてみてIB経由でクラスにViewController変数を追加するのはやったことなかったので、とても勉強になりました :)

posted by Png satoko on Tue 6 Sep 2011 at 15:32

今後のためのメモ。
CopyOnSelectやっぱり便利ですね

[メモ: 2012.4.6] Terminalを更新した際に、CopyOnSelectをupdateしようとして手間取ってしまったので、ステップ5と(注)を追加しました。

CopyOnSelectについて

Terminal.appで選択時にコピーするSIMBLプラグインを作りました
http://blog.s21g.com/articles/1075

TerminalのBundleVersionをチェック

About Terminalで:

Version 2.2 (297)

CopyOnSelectのビルド

  1. gitをチェックアウト
  2. Info.plist内のMaxBundleVersionを297にして保存
  3. ビルド
  4. TerminalCopyOnSelect.bundleを~/Library/Application Support/SIMBL/Plugins/にコピー
  5. Terminalを再起動し、メニューのPreferencesの下に"Copy On Select"が表示されれば完了

(注) ビルド時、Analyzeを選ぶとRelease版の.bundleも生成されます。ステップ4時には、必ずRelease版の.bundleをコピーすること。

詳細は下記を参照

Macのターミナルで選択するだけでCopyする
http://www.barasu.org/pc/mac/5598.html

posted by Png satoko on Fri 29 Jul 2011 at 14:48

LionにするにあたってCode Snippetsを移動する必要があるのかなと思ったのですが、Code Snippetsはちゃんと〜/以下に格納されているので意識する必要はなさそうです。

ただ、新しいマシンに以降するとき等は作業をする必要があります。

Xcode 4のCode Snippetsを別のマシンに移動する stackoverflow

How Can One Transfer Xcode 4 Code Snippets from One Machine to Another
http://stackoverflow.com/questions/5261076/how-can-one-transfer-xcode-4-code-snippets-from-one-machine-to-another

上で見つけたんですが、こんな感じにsnippetsが格納されています:

   1  % pwd                                          
   2  ~/Library/Developer/Xcode/UserData/CodeSnippets
   3  % ls -1
   4  104B0BF3-0D45-4663-B56A-8DA5DB05A80B.codesnippet
   5  1F92BFD6-8936-4DD8-9AC6-98757661A9FE.codesnippet
   6  206B6C3E-457A-4BEE-A679-C31DB7126C66.codesnippet
   7  20D4FA3F-B205-4EBD-BCCA-568046C1D8F8.codesnippet

自作の.codesnippetファイルを追加してみる

1つのファイルをコピーして、IDECodeSnippetIdentifierを他と被らないように適当に編集後、Xcodeを立ち上げて見てみましたがちゃんと追加されていました。ファイル名は人間に分かりやすい名前にしていたのですが、無事認識されていました。

   1  add_action_sheet.codesnippet

で、~/Library/Developer/Xcode/UserData/CodeSnippetsをgitリポジトリに格納してみました。 運用的には下記のように:

  1. Code Snippets用のgitリポジトリを作成
  2. 新しいXcodeをインストールする前にgit push
  3. Xcodeをインストール
  4. Code Snippetsディレクトリにgit clone
  5. XcodeのCode Snippetsで移行されているかを確認

下記の記事も参照ください:

[git] 共有リポジトリを作る:git init --bare --shared=true
http://blog.s21g.com/articles/1312

[追記 2011.07.22]
@Seasons さんに教えて頂きました!Dropboxもいいですね。
ついでにDropboxでMac内の任意のフォルダを同期できるようにできるアプリ「MacDropAny」掲載されていました。便利♪:

Xcode 4のスニペットをDropboxで同期する - Seasons.NET
http://d.hatena.ne.jp/Seasons/20110328/1301300189

posted by Png satoko on Fri 22 Jul 2011 at 13:54

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

GCD 前:

   1  + (MyController*)singleton {
   2  	static MyController *controller = nil;
   3  
   4  	if(!controller) {
   5  		controller = [[MyController] alloc] init];
   6  	}
   7  	return controller;
   8  }

GCD 後:

   1  + (MyController*)singleton {
   2  	static dispatch_once_t pred = 0;
   3  	static MyController *controller = nil;
   4   
   5   	dispatch_once(&pred, ^{
   6    		controller = [[MyController alloc] init];
   7   	});
   8   	return controller;
   9  }

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 Png satoko on Tue 28 Jun 2011 at 11:21
Contents
NSAssertやNSLogを無効にする:-DNS_BLOCK_ASSERTIONS=1とNS_BLOCK_ASSERTIONS
GDBでview.frameを表示させる
Core Animationについてのリンク集
[iPhone] new BSDライセンスについてライセンス引用のメモ
Implementing a Container View Controller in UIViewController Class Reference
UITableView用のNSIndexPathの作り方
Xcodeのテンプレート、View-based ApplicationとWindow-based Applicationの違い
CopyOnSelectのLion対応
Xcode4のCode Snippetsを別のPCに移動する+gitで管理する
[iPhone] Singleton: iOS4以降はGCDのdispatch_onceを使う
Comments
KingofSmack: Here also good reads for this mobile applicatio... '14-5
satoko: stackoverflowでも同じエラーを挙げている人がいたので、1.3でアップロードしたよっ... '10-12
ujihisa: :%s/blog/glob/g '10-7
satoko: しゅが〜様 返事が遅くなって申し訳ありません。また、投稿百景ご購入ありがとうございます。 ... '09-10
しゅが~: こんにちは。投稿百景を発売日翌日から利用しています。本当にいいAppを作っていただきました。罫... '09-10
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ