2014年10月11日土曜日

文字列を大文字小文字の区別無く比較する

文字列を大文字小文字の区別無く比較する場合には、NSStringのcaseInsensitiveCompareメソッドを利用します。 こんな感じ
    NSString *stringValue1 = @"ABCDE";
    NSString *stringValue2 = @"abcde";
    
    if([stringValue1 caseInsensitiveCompare:stringValue2] == NSOrderedSame)
    {
        NSLog(@"stringValue1 と stringValue2 は同じです。");
    }

2014年9月11日木曜日

新しいiTunes connectで「You must choose a build.」エラーがでる

iTunes connectが新しくなって日本語が多くなりましたね。
今まで使っている機能はある程度限られていたので、あんまり英語とか日本語を意識せずに出来ていましたが、レイアウトを変えられるとビックリします。

さて、今までアプリをアップロードする方法は、iTunes connectで情報を入力 -> XcodeなどでアプリをArchive&アップロードという手順だったのですが、。

新しいiTunes connectは、iTunes connectで更新情報を入力 -> XcodeなどでアプリをArchive&アップロード -> 再度iTunes connectにてアップロードされたArchiveを選択 -> レビュー情報を入力

という手順になります。

アップロードされたArchiveは、「ビルド」の項目の「+」ボタンから選択出来ます。



2014年8月5日火曜日

アプリのURLスキーマを設定する方法

アプリを別のアプリから、開きたい場合はURLスキーマを設定する必要があります。

手順は以下

TargetのinfoからURL Typesを選択して、「+」をクリック

そうすると入力欄が表示されるので、「identifier」と「URL Schemes」を入力


identifier は アプリのid
URL Schemes は開きたいurlにします。(他のアプリをかぶらない様に注意)

アプリのAppStoreのURLを調べる方法

アプリを宣伝する場合に、AppStoreのURLが必要になる場合があると思います。

そんな時は、以下の手順。

① iTunes Connectにログイン
② 対象のアプリのページにジャンプ
③ View in App StoreのURLをコピー


アプリから別のアプリを開く方法

アプリを複数作った時に、宣伝として別のアプリを起動したい場合があると思います。

そんな場合は以下のコードを書いておきます。


NSURL *appURL = [NSURL URLWithString:@"aaaaaa:"];  // aaaaaaにスキーマを設定
NSURL *strURL = [NSURL URLWithString:@"https://itunes.apple.com/us/app/aaaaaa/id000000000?l=ja&ls=1&mt=8"]; // AppStoreのURLを設定
    
if([[UIApplication sharedApplication] canOpenURL:appURL] == YES)
{
    [[UIApplication sharedApplication] openURL:appURL];
}
else
{
    [[UIApplication sharedApplication] openURL:strURL];
}

これでアプリが起動出来る時は、アプリが。
起動できない時はAppStoreが開く様になります。


スキーマについては以下
http://startup-objc.blogspot.jp/2014/08/url.html

AppStoreのURLについては以下をご参照下さい。
http://startup-objc.blogspot.jp/2014/08/appstoreurl.html

2014年6月4日水曜日

Swiftへ移行するべきかどうか

WWDCでiOS8とSwiftが発表になりましたね。

このブログ内でSwiftを取り扱う事は、基本的には無いと思いますが、
別ブログでいろいろ書いていこうかとは思っております。
(ここはあくまでもObjCだけの空間にしたいです。)

基本的にはObjCとSwiftは共存するとの事なので、一安心していますが
いつまた方針が変わるかはわかりません。
仕事的には当分はObjC一択の姿勢ですが、いつかはSwiftを本格的にやる必要があるかもしれませんね。

少し少しやっていこうと思います。

2014年4月27日日曜日

AdMobで「Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADSlot state]: unrecognized selector sent to instance 0x1701dbc60'」という様なエラーが出る。

AdMob導入時に「Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[GADSlot state]: unrecognized selector sent to instance 0x1701dbc60'」という様なエラーが出る場合、「Build Settings」の設定が足りない場合がある。

「Build Settings」の「Linking」の「Other Linker Flags」に「-ObjC」を設定すると解決する。


UITableViewのヘッダの背景色を変更する。

UITableViewを利用するとき、Viewを作るのは面倒だけど、背景色を変えたいという時が有ると思います。

そんな時はこのコード。


#pragma mark -
#pragma mark UITableViewDelegate method
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
    if(section == 0)
    {
        [view setTintColor:[UIColor orangeColor]];
    }
    else if(section == 1)
    {
        [view setTintColor:[UIColor greenColor]];
    }
}

サンプルとはいえ、色合いが。。。

2014年4月25日金曜日

【続報】アプリのアップロード時に「improper advertising identifier [IDFA] usage. your app contains the advertising identifier [IDFA] api but you have not indicated its usage on the prepare for upload page in itunes connect」というメッセージが出る

http://startup-objc.blogspot.com/2014/04/improper-advertising-identifier-idfa.html

以前の記事の続報です。

実はitunesconnectのアップ時の質問に以下の文章があります。

Advertising Identifier Does this app use the Advertising Identifier (IDFA)? The Advertising Identifier (IDFA) is a unique ID for each iOS device and is the only way to offer targeted ads. Users can choose to limit ad targeting on their iOS device.

これをNOと答えると、IDFA使ってませんと解釈されるので注意。

結果、利用したアプリはアップ時に弾かれます。

おまけに、アップしてもいないので、手動リジェクトが出来ません。

ぐぬる。

UINavigationControllerで自動表示される「前画面に戻る」的なボタンを非表示にする。

UINavigationControllerを利用していると(いえ、どんな場面でもあり得ますが)、時々前の画面に戻ってほしくない時があります。

表示が主なアプリなら良いのですが、「編集処理をしている途中に戻られると厄介」なんて事もあります。

そんな時に邪魔な「UINavigationControllerの戻るボタンを消す」のが以下のコード


 [[self navigationItem] setHidesBackButton:YES];


これでok


2014年4月10日木曜日

アプリのアップロード時に「improper advertising identifier [IDFA] usage. your app contains the advertising identifier [IDFA] api but you have not indicated its usage on the prepare for upload page in itunes connect」というメッセージが出る

アプリのアップロード時に以下のメッセージが表示される。

improper advertising identifier [IDFA] usage.
your app contains the advertising identifier [IDFA] api but you have not indicated its usage on the prepare for upload page in itunes connect
直訳
不適切な広告識別子[IDFA]使用法。 
あなたのアプリは、広告識別子[IDFA] APIが含まれていますが、あなたは接続iTunesのアップロードページの準備にその使用法を示していない。
itunes connetで毎回質問される英文の内容をよく読まないでチェックつけてサブミットしたせいかと思うけど、一回アップして手動リジェクトしないと確認出来ないので、よくわからない。
(そもそもアップが出来ないので・・・)

対応としては、AdSupportのフレームワークを外すと通ります。

調査不十分で申し訳ないですが取り急ぎ。


追記(2014-04-28)

続報です。
http://startup-objc.blogspot.jp/2014/04/improper-advertising-identifier-idfa_25.html

2014年3月8日土曜日

UIRefreshControl を使って引っぱり更新をする。

iOS6で追加された引っぱり更新用のUIRefreshControlですが、先日私事でiOS5の呪縛から逃れたのでメモメモ。

※ちなみにiOSの6と7ではUIのビジュアルが違いますが、個人的にはiOS6の方が好きですが、手元に環境がないのでこの例はiOS7です。

UITableViewControllerにrefreshControlのプロパティがあるので、画面の初期化の時に設定。
UIControlEventValueChangedでイベントが取得出来るので、その設定も忘れずに。

// リフレッシュコントロール
[self setRefreshControl:[[UIRefreshControl alloc] init]];
[[self refreshControl] addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];

イベントの受け取りメソッドも定義。


- (void)refresh:(UIRefreshControl *)control
{
    // 回転開始
    [[self refreshControl] beginRefreshing];
    
    //
    // 処理
    //
    
    // 回転終了
    [[self refreshControl] endRefreshing];
}

「beginRefreshing」と「endRefreshing」でインジケーターの回転のタイミングを調節できるので、これでやりたい処理を挟みます。


こんな感じ。

2014年3月7日金曜日

segmentedControlStyle でワーニングが出る

[[self _segmentedControl] setSegmentedControlStyle:UISegmentedControlStyleBar]; 
こんな指定をしているとiOS7から以下の様なワーニングが表示されます。
'UISegmentedControlStyleBar' is deprecated: first deprecated in iOS 7.0 - The segmentedControlStyle property no longer has any effect
ワーニング内容からもわかるように、 segmentedControlStyleにはもう何の効果も無いようです。

廃止されてしまいました。

代替のプロパティも無いようです。

iOS7専用アプリの場合は、指定を消してしまってかまわないようです。

2014年3月6日木曜日

XcodeでMissing fileというワーニングが出る

こんなやつです。

これはバージョン管理システムとの不整合で発生するのですが、
なんとも気持ちが悪い。

実際に、このワーニングが出たまま、アプリをAppStoreに申請しちゃってもなんの問題もないし、エラーの原因になる事も無いのですが、ワーニングが出ているだけで精神衛生上よくない。(私は)

なので、消します。

まず、ワーニングをクリックするとコピー出来ます。
これをコピーすると以下の様な文字列がとれます。
file:///Users/take/Desktop/Workspace/プロジェクト名/TableSummaryView.m: warning: Missing file: /Users/take/Desktop/Workspace/プロジェクト名/TableSummaryView.m is missing from working copy
これの前半の
file:///Users/take/Desktop/Workspace/プロジェクト名/TableSummaryView.m
の部分が必要になります。

この文字列の前にsvn rm をつけます。
あとfile://をとります。
svn rm /Users/take/Desktop/Workspace/プロジェクト名/TableSummaryView.m
これをターミナルに貼付けて実行!


これでok

ちょっと伏せ字が多くてすいません。


2014年2月15日土曜日

UITableViewの編集モードの「Delete」文字列の変更

UITableViewの編集モードの文字列が「Delete」なので変更したい時があります。

そんな時は「UITableViewDelegate」の「- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath」メソッドをいじります


    
//
// UITableViewDelegate
//
- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"削除";
}

こんな感じ

自動的に幅も変わります。