アイフォン」タグアーカイブ

アイフォンアプリ、情報収集メモ UITableVIew、ストーリーボード関連|・UIPIckerViewの情報まとめ|・その他、カメラ、色|Admob view|・CoreData、データベース検索

アイフォンアプリ開発で参考にしたサイトのリンクです。また、お世話になると思います。
 似たような内容が掲載されているサイトが多い中から、見やすく、画像を使用して丁寧に解説されているサイトを掲載しました。
特に画像とソースコードが掲載されているサイトは参考になります。自分も見習いたいですが、画像を使用した解説まで手が届きません。

・UITableVIew、ストーリーボード関連
UITableVIewで、下のセルに到達すると、次の読み込みを表示する

Objective-C – UITableViewのページング(最下部セルまでスクロールしたら次の○件読み込んで表示)方法 – Qiita [キータ]

UITableViewでページング処理をする。 – 24/7 twenty-four seven

UITableViewのスクロール位置をView再読み込み時に復帰する方法 – へびにっき

Objective-C – UITableViewを行単位で更新する – Qiita [キータ]

iPhoneプログラミング: Table Viewを使ってデータを表示する – インターネットコム

UITableViewをスクロールしたときに、一番下のセルがすべて出るよう吸着自動スクロールさせる方法 | ssdkfk

StoryBoardで画面遷移、画面間の値の受け渡し(とデリゲート) – 青春B■雑記blog‐青酸カリ カラメルシロップ味‐
>画面遷移をするときに、ボタンが押されると勝手に画面移動しないパターンで作成する方法が記載されています。
ボタンから次の画面へつなぐと、ボタンをクリックして有無を言わさずに強制移動す。この標準的な方法では、ある条件の元で画面を遷移させたい用途による処理が使えません。
つまり、ボタンを押して、ある値が1だったら移動させ、ある値が0のときは、アラートを表示させて、現在の画面のママにしたいという処理をしたい場合です。
preparesegueでも強制移動なので、このメソッドがあるなしにボタンをタップすると強制的に画面を移動させられてしまいます。
ナビゲーションコントローラーがあっても正常にバーが表示されました。

StoryBoardで画面遷移、画面間の値の受け渡し(とデリゲート)
– 青春B■雑記blog‐青酸カリ カラメルシロップ味‐

CoreTextを使った軽量TextView – LTCoreText | Cocoaの日々情報局

Table ViewにSearch機能を加えましょう | Ray Wenderlich

[Obj-C]ストーリーボード, IBを使用せずにWindowとViewを表示してアプリを作成する方法 | Maccle

iPhone/Androidアプリ開発アレコレ » NSSortDescriptor
>[obj-c][/obj-c]NSDictionaryを含むNSArrayのソート

[iPhone] UITableView を所定の位置までスクロールさせる | Sun Limited Mt.

StoryboardのUnwind Segueの使い方 | Developers.IO
>戻りを変えるストーリーボード


・UIPIckerViewの情報まとめ
UIPickerViewを複数表示、下から表示させるアニメーション

UIPickerView
iPhoneプログラミング・・・のただのメモ。 

初心者が進めるiphoneアプリ開発 PickerViewの使い方(UIPickerView)

[iPhone 開発メモ] UIPickerView の使用方法 | Sun Limited Mt.

ピッカービュー(UIPickerView)の使い方 – あらきんぐのiPhoneアプリ開発ブログ

UIPickerViewで項目選択UIを使ってみる|ゆぅさんのiPhone開発技術関連ブログ

・複数のUIPICKERVIEW
絶対に挫折しないiPhoneアプリ開発入門Part.27 ~ひとつのUIViewControllerに複数のUIPickerView,UITextField~
– 三千世界のインターネットで烏と共に

iOS – UIPickerViewを下から動的に表示する方法 | 田村倉庫

UIPickerViewのポップアップ日々、学びつづける

[iPhone] 下からニュッと出てくるDatePicker | BuGcloUd.com

【文法】UISegmentedControlについて – creativi.tea

iPhoneプログラミング: Table Viewを使ってデータを表示する – インターネットコム

GorozoSoft: UITableViewControllerからの脱却

・その他、カメラ、色
【objective-c】文字表現の幅を広げる | Septeni Engineers’ Blog | セプテーニ エンジニアブログ
>NSAttributedStringを用意する

http://lab.dolice.net/blog/2013/05/29/objc-ui-button-basic/
UIButtonの基本的な使い方をまとめました – Dolice Lab

target=_blank>http://www.sirochro.com/note/objc-uicolor-rgb/
>UICOLOR表

iPhoneのカメラの起動・保存 : てるてる坊主

・CoreData、データベース検索

CoreDataで日本語検索が上手くいかない | RuputerFan

6.11 あいまい検索


Admob view

【iPhone】AdMobの広告を表示する(2)

xcode,Storyboard使用時に AppDelegate 内から ViewController を参照する方法
>とてもわかりやすい。ただ、途中でコードの説明がなくっている。でもサンプルソースのダウンロードがある。

cocos2dにAdWhirlを実装してiAdとAdMobを切り替える

(1)3Dアプリ製作Unity作業の注意点、C#、Blenderブレンダーとの連携について|(1)アイフォンアプリ製作に役立つユーチューブ動画、iOSストーリーボードUIViewControllerなど

(1)アイフォンアプリ製作に役立つユーチューブ動画、iOSストーリーボードUIViewControllerなど

**

3Dアプリ製作Unity作業の注意点、C#、Blenderブレンダーとの連携について

現在、アイフォンアプリ、アンドロイドアプリ用のスマートフォンゲームアプリを製作中です。
7月に作業に取りかかりました。はじめてのUnityですので、いろいろと覚えることがありすぎて大変です。
 特に、Unityは3Dオブジェクトファイル、例えばブレンダーのファイルやFBXファイルを扱えることから、3Dポリゴンオブジェクトを作成できる3Dソフトとの連携が可能です。
 つまり、3Dソフトブレンダー、MAYA、LIGHTWAVEなどで作成した3DポリゴンをUnityで表示させてゲームとして楽しむことができます。
 
 しかし、覚えること、設定、パラメータなどが多くて忘れがちです。そこで、約1ヶ月経過したこともあり、ここで、最初に躓いたところをメモしていきます。
 
・C#、JAVASCRIPTについて
JAVASCRIPTとC#は、ほぼ構成が似ているので、ホームページや関連書籍を参考にできます。
また、JAVASCRIPTとC#の変換ウェブサービス(無料)もあります。

・C#について

#include,#importを記述しなくても同じプロジェクト内のスクリプトは利用可能。
MonoBehaviourを継承しないクラスも作成できます。ただし、Unity独自のコマンドは利用できません。
using System.Collections.Generic; でstdのListが利用できます。
MonoBehaviourを継承するスクリプトはAddComponentが必要です。
[c]
public MyDialog dialog;
//dialog=new MyDialog();//not work
dialog=gameObject.AddComponent<MyDialog>();//MyDialog.cs
[/c]

GUI系のオブジェクトの扱いは、座標がスクリーン座標となります。3D空間ではありませんので、はじめは、あれ?になりますが、ああそうなのかそういうことねとなります。

Inspectorにパブリック変数を表示させたくないときは
[HideInInspector]
を記述します。すでに変数を与えてある場合や外部から変数をあてる必要がないときに使用します。

・ブレンダーとUnityの連携、オブジェクトの挿入

ブレンダーで作成したオブジェクトの大きさを1くらいとすると、Unityで表示させるときは、スケールを約30ー50倍くらいに拡大する必要があります。カメラ位置0, 10, -13の場合で、Projection:Perspectiveです。
また、横面にするためには、Y軸で90度、正面を見せるためにY軸180度回転させる必要があります。

UVをブレンダーで設定し、テクスチャを設定後、FBXに出力し、Unityにインポートするとき画像のリンクが解除されます(パスが不明となるため)ので、再度Unityで画像を設定する必要があります。画像を設定するだけです。UnityでUVを設定し直すようなことはありません。まあ、Unityにはポリゴンを作成する機能がないので、Unity自体でUVを作ることはできないので当たり前と言えば当たり前ですが。

出力のときは不要なカメラ、オブジェクトが挿入されないように、出力の時に、設定をします。

テクスチャは、オブジェクトで異なる設定で使いたい場合は、重複のテクスチャ、サーフェース名は使用しないこと。特に、名称なしやデフォルトは避けるようにしてください。重複のサーフェース名を使用すると同じ色になったり、想定した色と異なります。後の修正作業が面倒です。

・Unityに3Dオブジェクトを表示させて思ったこと

意外に画面がきれいに表示されて折らず、ブロックひずみになっていると思いました。

・今後のUnityの作業

ブレンダーでボーンを設定し、アニメーションを設定した後に、Unityにインポートしてアニメーションさせる
アニメーションをプログラムで制御する

参考リンク

http://wiki.unity3d.com/index.php/CSharpMessenger_Extended以前のリンク先が変わっていました。

アイフォンアプリ製作に役立つユーチューブ動画、ストーリーボードUIViewControllerなど

アイフォンアプリで、テーブルのリストを選択して、ストーリボードの遷移を学習できます。
短いもので30分、長いもので1時間程度の学習時間になります。動画を見ながら、X-CODEでアプリを作りながら作業できるようにすれば理解も早いと思います。大きなディスプレイかマルチディスプレイの環境があるとよいです。

 英語ですが、コードの入力からわかるので動画の通りに進めば、アプリが完成します。
いくつかの書籍を買ってユーチューブの内容を比較をすると、書籍の内容は、動画の説明の5分から10分程度にあたり、ユーチューブの動画の内容の濃さに驚きます。著者の実力を攻めているのではなくて、文字と静止ベースと出版界の事情の限界なのでしょう。
文字や画像が多くなると著者の負担が大きく、ページ数が増えれば書籍の金額高くなり、売れなくなるわけです。内容が濃ければ濃いほど読者は理解が深まりますが、実際はページ数が多くなり、本が重く検索できず、金額が高いという残念な結果になるのでしょう。
 書籍、紙による教育、指導、教示の限界というものでしょうか。
動画も実際の講義やセミナーに比べて、緊張感や情報量、その場の雰囲気などに劣りますが、それでも十分学習できる内容でした。

(1)テーブルビューで項目を削除したときに、エラーとなる場合の例です。

ViewController.m
[c]
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if (editingStyle==UITableViewCellEditingStyleDelete) {
Contact *delegatedContact=[self.contacts objectAtIndex:indexPath.row];
NSManagedObjectContext *moc=self.delegate.managedObjectContext;
[moc deleteObject:delegatedContact];
NSError *error;
if (![moc save:&error]) {
NSLog(@"error");
}

//もしこの状態で項目を削除したときにエラーがでたら [self loadData]の機能が足らないことになります。
[self loadData];//これがないと項目を削除したときにエラーがとなります。
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];

}
}
[/c]

関数
[c]
-(void)loadData{
NSManagedObjectContext *moc=self.delegate.managedObjectContext;
NSFetchRequest *fr=[[NSFetchRequest alloc]initWithEntityName:@"Contact"];
NSError *error;
self.contacts=[moc executeFetchRequest:fr error:&error];

}
[/c]

(2)UITableViewCell *cellのエラーが多い、forIndexPath:indexPathを削除する

2012年くらいのXC0DEのユーチューブ動画や書籍には、forIndexPath:indexPathが記載されていません。新しいバージョンのXCODEではforIndexPath:indexPathが追加されていて、エラーになることがあります。
[c]

– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
//アプリ実行をして不明なエラーの時は、forIndexPath:indexPathを削除する
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
// Configure the cell..
return cell;
}

[/c]

・その他、エラーの対処

this class is not key value coding-compliant for the key cancelButtonPressed.’
これは、A画面からB画面に遷移するとき、遷移先のB画面にあるcancelButtonPressedの設定が間違っているために発生したエラーです。
A画面でボタンをタップしたときに、強制終了するので、A画面での問題かと思いましたが、A画面からB画面に移動する直前でエラーとなりました。

対処:
cancelButtonPressedが間違ってい設定されていた(画面上でびっくりマークが表示されている)部分を削除しました。

原因:
紐付けを行って、取り消しをコード上でしてもXlib上ではまだゴミが残っていたみたいです。そのため、びっくりマークが表示されていました。
慣れていないと何がどうなっているのかわからないエラーでした。

使い回しのできるメソッド、deleteData:(NSString*)deleteQueryで効率よく見やすく処理している記載方法

[c]
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
if (editingStyle==UITableViewCellEditingStyleDelete) {
Person *p=[arrayOfPerson objectAtIndex:indexPath.row];

[self deleteData:[NSString stringWithFormat:@"DELETE from PERSONS where NAMA is ‘%s’",[p.name UTF8String]]];

[arrayOfPerson removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
}
-(void)deleteData:(NSString*)deleteQuery{
char *error;
if (sqlite3_exec(personDB, [deleteQuery UTF8String], NULL, NULL, &error)) {
NSLog(@"OK");
}
}
[/c]

iOS Development: Storyboards and UITableViews (Part 1 of 2)

評価:星4つ
ストーリーボード、UITableViewのコード説明、リストの項目の追加、削除、変更までが説明されていて、非常に役に立つ講座です。アイフォン関連の初心者向け書籍に書いてある以上のことが学べます。一般に売られている書籍の内容の3倍以上の内容の濃さがあります。書籍の内容は、導入部だけで、そこから学ぶことは非常に少ないのです。実際は、そこからどうやって、発展させていくのかと言うことなのですが、実際のアプリ製作の約立つ内容にまでは踏み込まれていません。書籍では、単に、画面にリストを表示させておしまいというのが多い中で、この動画はリストに表示させて追加、削除まで説明されています。

iOS Development: Storyboards and UITableViews (Part 2 of 2)


iOS Development: Core Data

評価:星3つ
50分と1時間7分のところで、うまく動作しないところがありました。コンパイルエラーがなくて、リストを削除するとエラー、動作停止になります。
今の実力では直せません。
コメントにも同様の記載があるので、他の人も戸惑っているところがあるみたいです。
他の動画を見ながら、修正したいと思います。

・Xcode 4.6 Tutorial – UITableView with Search Bar (Part 1)

画像1
評価:星3つ
UITableViewのコードが説明されており、検索についても説明。なお、私が実際にアプリを作ると検索が上手く動作しませんでした。リストを選択したり、リストを検索する方法が学習できます。
どこが悪かったのかを後日検討したいと思います。

Xcode 4.6 Tutorial – UITableView with Search Bar (Part 2)

iPhoneアプリ(3作目)申請からリジェクト、修正、リリース状況のまとめ 2013年7月、どんぐり合戦

iPhoneアプリ(3作目)申請からリジェクト、修正、リリース状況のまとめ 2013年7月、どんぐり合戦

・経緯

 7月10日 申請
 7月17日 リジェクト
 7月18日 修正
 7月24日 予定だった24日のリリース日を7月26日に変更
 7月25日 認可
 7月26日 リリース
 

・7月10日申請

App Storeへ7月10日午後1時20分頃申請完了、3つめのアイフォンアプリ
「今回のApp Storeへの申請でのエラーは

(1)WEBのiTunesコネクトでDistribution証明書を作成し、ダウンロードした後、

ダブルクリックして、XCODEを起動し、ビルド設定をコピーして、リリース状態にしたあと、
次に、Product->Archiveをしたいができない。これができればオーガナイザが起動します。
それが、Archiveがグレーになっていて選択できません。
なんのことはない、ios Deviceにしてできました。このとき実機が接続されている必要はありません。実機なしでも申請処理可能。

(2)次に、Bundle IDのところでした。

オーガナイザでValidateを押して進行中にエラーが表示されました。

com.enjoygoodtown.aaaa
とするときのaaaaだけを入力すれば良かったみたいですが。
com.enjoygoodtown.aaaa
をそのまま登録したら、
com.enjoygoodtown.com.enjoygoodtown.aaaa
と表示されて、オーガナイザのValidateチェックでエラーとなりました。

そこで、再度iTunesコネクトで入力を
aaaa
としました。
画面上に、com.enjoygoodtown.aaaaと表示されていたので、それをそのままみて確認すれば良かっただけでした。」

3作目のアイフォンアプリ申請でリジェクトされました。Retina判別が不十分

(1)リジェクト対応:3作目のアイフォンアプリ申請でリジェクトされました。Retina判別が不十分
「リジェクト理由:iPad,iPhone5で画像が正常に表示されていない(意訳と原因の解釈を追加して理由を記載しています。)

原因:iPadにおけるレティナ、非レティナでの判別処理が不足。そのために、非レティナの状態で、レティナ用の画像が表示され、画像が正常に表示されていませんでした。画像の一部しか表示されない状態。

対応:iPadレティナ、非レティナでの判別処理を改善しました。スクリーンショット2枚が添付されていたので、原因究明が楽でした。iPhone5も正常に表示されていないとコメントされていますが、おそらくiPadのみが正常に表示されていないのだと思うので、iPadの確認を重視します。

retina判定で、
(1)([[UIScreen mainScreen] respondsToSelector: @selector(scale)]

(2)([[UIScreen mainScreen] respondsToSelector: @selector(scale)] && [[UIScreen mainScreen] scale] == 2.0)
として、レティナかどうかの判定を追加して、シミュレータでiPad非レティナで動作確認ができるようになりました。」

(2)リジェクト対応:再申請、今度は通過するか、

(2)リジェクト対応:再申請、今度は通過するか、iTunesConnectにログインして、アプリを選択してReady to upload binary をクリック
「7月18日、再申請しました。
 iTunesConnectにログインして、アプリを選択してReady to upload binary をクリック。
 つぎに、エディットスキームでDictributionを選択して(ここは各自設定が異なると思います)、オーガナイザを開き、該当アプリを選択して、Validate、Distributeをそれぞれクリックします。」

再申請、まだ認可されず、認可される前にリリース日を変更

(3)リジェクト対応:再申請、まだ認可されず、認可される前にリリース日を変更
「7月24日 メールがなくて認可されていないので、予定だった24日のリリース日を7月26日に変更(いまここ)なお、iTunesコネクトだったかに、不正侵入があったらしく数日、サイトが閉鎖されていました。これが影響しているのかもしれません。」

やっと認可、そしてリリース

(4)完了、アイフォンアプリのリジェクト対応:やっと認可、そしてリリース
7月25日、アイフォンアプリがようやく認可されました。

アイフォンアプリの宣伝、アイフォンアプリ名:どんぐり合戦を7月26日リリースしました
「画像
説明

*内容
アイフォンアプリ名:どんぐり合戦
りすがどんぐりをカラスに投げてカラスを退治するミニゲーム簡単シューティングです。現在の仕様はランキング無し、広告ありです。iPadレティナにも対応しています。

*ダウンロード
どんぐり合戦iTunesストアからダウンロードできます。

*製作のべ期間4月〜7月、3ヶ月+約2週間(企画、開発、リリース日までの期間を含む)、申請からリジェクト1回の約15日で通過、日本語版のみです。cocos2d for iPhoneを使用、製作人数1名
説明ページ

アイフォンアプリの宣伝、アイフォンアプリ名:どんぐり合戦を7月26日リリースしました

アイフォンアプリの宣伝、アイフォンアプリ名:どんぐり合戦を7月26日リリースしました。

申請からリリースの記事

画像
説明

*内容
アイフォンアプリ名:どんぐり合戦
りすがどんぐりをカラスに投げてカラスを退治するミニゲーム簡単シューティングです。現在の仕様はランキング無し、広告ありです。iPadレティナにも対応しています。

*ダウンロード
どんぐり合戦

*製作のべ期間4月〜7月、3ヶ月+約2週間(企画、開発、リリース日までの期間を含む)、申請からリジェクト1回の約15日で通過、日本語版のみです。cocos2d for iPhoneを使用、製作人数1名
説明ページ

リジェクトの内訳は、iPadのレティナ、非レティナ用画像が正常に表示されないというもので、判定処理をより厳密にして修正しました。

備考:過去のcocos2d for iPhone用アプリをcocos2d-xに移植していますが、objective-Cのcocos2d for iPhoneにようやく慣れてきたところで、cocos2d-xを勉強することになりゆっくり前進しているところです。
クロスプラットフォームの風が強く吹いておりcocos2d-xへ多くの人が流れて、cocos2d for iPhoneの今後のバージョンアップが気になります。好みとして、慣れているせいかobjective-Cのcocos2d for iPhoneがプログラムしやすいですね。

(4)完了、アイフォンアプリのリジェクト対応:やっと認可、そしてリリース

(4)完了、リジェクト対応:やっと認可、そしてリリース

 7月25日、アイフォンアプリがようやく認可されました。リリースは明日の予定です。
 前回のリジェクトの内容で、アイフォン5もバグレポートの機種としてメールに記載されていましたが、チェックをした機種がアイフォン5を含むものであり、実際のバグはiPadミニ(メールにはアイフォン5、「iPad」のみが記載)で発生したものと想定しました。
 そして、原因がRetina、非レティナ判別が不十分と判明し、対応しました。
とりあえず、認可のメールが来て安心しました。

結果として、リジェクト後の再申請は、最初の申請と同様に時間がかかるということがわかりました。
急ぐときは、メールで急いでチェックしてねとお願いした方がよさそうです。

 ・経緯
 7月10日 申請
 7月17日 リジェクト
 7月18日 (2)再申請前回までの内容記事
 7月24日 (3)リリース日変更メールがなくて認可されていないので、予定だった24日のリリース日を7月26日に変更(いまここ)なお、iTunesコネクトだったかに、不正侵入があったらしく数日、サイトが閉鎖されていました。これが影響しているのかもしれません。
 7月25日 認可
 7月26日 リリース

(2)アイフォンアプリ開発、リジェクト後の対応:再申請、今度は通過するか、iTunesConnectにログインして、アプリを選択してReady to upload binary をクリック

(2)アイフォンアプリ、リジェクト対応:再申請、今度は通過するか

前回(1)のリジェクト直後、ソフト改修の記事

 前回、Retina対応iPadと非Retinaの表示において、正常に表示されていないとリジェクトされました。ソースコードを確認し、判別チェック項目を追加しました。
 この申請で大丈夫でしょうか?まず結果を待つことにします。
 すべてのアイフォン、iPad機種を保有するのは、経済的に難しいのでシミュレータが頼りです。
 また、アップルのリジェクトの理由とテスト項目が詳細に提示されていません。例えば、アイフォン4ではOKで、アイフォン5はだめ、iPadMINIはだめで、iPadレティナはOKみたいに細かく不具合を示してくれれば良いのですが、「アイフォン5とiPadで確認したよ、だめなところがあります」程度なので、両方で不具合なのか、片方で不具合なのかが不明です。
 
 

7月18日、再申請しました。

 iTunesConnectにログインして、アプリを選択してReady to upload binary をクリック。
 つぎに、エディットスキームでDictributionを選択して(ここは各自設定が異なると思います)、オーガナイザを開き、該当アプリを選択して、Validate、Distributeをそれぞれクリックします。
 アップロードが始まります。
 
 

・経緯

 7月10日 申請
 7月17日 リジェクト
 

 7月18日 再申請(いまここ)

(2)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ CCTextuer2DからCCSpriteを使う

(2)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ CCTextuer2DからCCSpriteを使う

他の関連記事cocos2d-xに移植する過程の記録メモまとめ、Androidクロスプラットフォーム化へ 、(1)〜(6)分

 いろいろと本を3冊買って、cocos2d for iPhone をcocos2d-xに移植する過程を試みていますが、結構進みません。
 objective-cをc++にしようとするとかなり時間がかかりそうです。すんなりとはいきません。
 

・スプライトの作成の場合の比較

C++であるcocos2d-xは、オブジェクトの生成の時にnewを使用します。
一方のobjective-cはそのまま記載して画像を設定します。
・C++ , cocos2d-x

 CCSprite *sprite=new CCSprite();
    sprite->initWithFile("hiyoko_sample.png");
    sprite->setPosition(ccp(0,0);
    this->addChild(sprite);
sprite->autorelease();

・objective-C, cocos2d for iPhone

 CCSprite *sprite=[CCSprite spriteWithFile:@"hiyoko_sample.png"];
 sprite.position=ccp(0,0);
 [self addChild:s];

・スケジュールの設定

C++ , cocos2d-x
int iTimer;
//schedule 1秒ごとに加算する

    bool HelloWorld::init()//この場所にスケジュールをした場合
	{
    this->schedule(schedule_selector(HelloWorld::timer), 1.0);
    this->scheduleUpdate();
    }
  	--
	void HelloWorld::timer(){
  	  iTimer++;
	}

objective-C, cocos2d for iPhone

	[self schedule:@selector(timer:) interval:1.0f];
	-(void)timer:(ccTime*)delta{
		iTimer++;
	}

・座標の取得 position

C++ , cocos2d-x

CCSprite *test
    int x;
    int y;
    x=test->getPositionX();
    y=test->getPositionY();

objective-C, cocos2d for iPhone

CCSprite *test
    int x;
    int y;
    x=test.position.x
    y=test.position.y

・フォーラムの質問のallocのCocos2d-iphone to Cocos2d-X

タイトル:Converting snipets of code from Cocos2d-Iphone to Cocos2d-x

>Cocos2d-iphone
CCArray *spiders = [[CCArray alloc] initWithCapacity:5];

>Cocos2d-X
CCArray *spiders=CCArray::createWithCapacity(5);

Texture2dText.cpp
CCTextureCache使うときは、CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
が必要

void TextureMipMap::onEnter()
{
    TextureDemo::onEnter();
    CCSize s = CCDirector::sharedDirector()->getWinSize();

    CCTexture2D *texture0 = CCTextureCache::sharedTextureCache()->addImage("Images/grossini_dance_atlas.png");
    texture0->generateMipmap();
    ccTexParams texParams = { GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE };    
    texture0->setTexParameters(&texParams);

    CCTexture2D *texture1 = CCTextureCache::sharedTextureCache()->addImage("Images/grossini_dance_atlas_nomipmap.png");

    CCSprite *img0 = CCSprite::createWithTexture(texture0);
    img0->setTextureRect(CCRectMake(85, 121, 85, 121));
    img0->setPosition(ccp( s.width/3.0f, s.height/2.0f));
    addChild(img0);

    CCSprite *img1 = CCSprite::createWithTexture(texture1);
    img1->setTextureRect(CCRectMake(85, 121, 85, 121));
    img1->setPosition(ccp( 2*s.width/3.0f, s.height/2.0f));
    addChild(img1);
    
    
    CCEaseOut* scale1 = CCEaseOut::create(CCScaleBy::create(4, 0.01f), 3);
    CCActionInterval* sc_back = scale1->reverse();
    
    CCEaseOut* scale2 = (CCEaseOut*) (scale1->copy());
    scale2->autorelease();
    CCActionInterval* sc_back2 = scale2->reverse();

    img0->runAction(CCRepeatForever::create(CCSequence::create(scale1, sc_back, NULL)));
    img1->runAction(CCRepeatForever::create(CCSequence::create(scale2, sc_back2, NULL)));
    CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
}

CCTexture2dを使用するとき

objective-C, cocos2d for iPhone

UIImage     *img        =[UIImage imageNamed:filename];
    CGImageRef  imageRefAll =[img CGImage];
    textureOther            =[[CCTexture2D alloc]initWithCGImage:imageRefAll resolutionType:kCCResolutioniPhoneRetinaDisplay];

COCS2d-x
CCTexure2Dでの注意、initWithTextureだと autorelease() is oK。しかし、CCSprite::createWithTextureでは、autorelease()を設定すると実行後しばらくしてエラーになる。
半自動か、手動管理のメモリ管理を決めましょう。

 CCTexture2D *testTexure=new CCTexture2D();
    CCImage *img=new CCImage();//UIImage
    img->initWithImageFile("hiyoko_sample.png");
    testTexure->initWithImage(img);
    CCSprite *testSprite=new CCSprite();
    //Textureの設定ではinitでも::createでもOKでもautoreleaseはinitになる。
    testSprite->initWithTexture(testTexure);//OK autorelease() is oK.
    //testSprite=CCSprite::createWithTexture(testTexure);//OK //but, not autorerelease()
    this->addChild(testSprite);
    testSprite->setPosition(ccp(120,240));
    
    testTexure->autorelease();
    testSprite->autorelease();//for initWithTexure
    

今日のアイフォンアプリ開発記録日誌、不明なエラー”_OBJC_CLASS_$_Stats”, referenced from

今日のアイフォンアプリ開発記録日誌、不明なエラー”_OBJC_CLASS_$_Stats”, referenced from

今日のエラー
アイフォンアプリを実行中の使用メモリ、CPU負荷を知りたくて、Stats.m,Stats.hを追加し、コンパイルすると

“_OBJC_CLASS_$_Stats”, referenced from
云々かんぬんのエラーが発生しました。

コードの記載が間違っているのかと思っていたら、XCODEの設定だそうです。

Target Membershipを設定すると良いそうです。

画像 targetmembership.jpg
targetmembership

今回のメモリ表示は、「達人のレシピ100」に記載されているものを自分コードに合うように変更しました。
cocos2dの場合はAppDelegate.m,hに記載しました。
サンプルコードのままでは表示されなくて、Admobで動作した記載を参考にしたら、表示されました。
画像、アイフォンキャプチャ画像
memory
こんな感じで表示されます。
メモリ使用量を見ると、なんどもゲームを繰り返し遊んでいると、メモリがどんどん増えているのがわかりました。どこかのタイミングでメモリを解放しないと増え続けそうです。

アイフォン・アイパッドデバイス端末のiOS Dev Centerへの追加登録手順メモ

アイフォン・アイパッドデバイス端末のiOS Dev Centerへの追加登録手順メモ

アイパッドをiOS Dev Centerに追加登録してアイフォン実機デバッグでアプリを確認します
アイフォンかアイパッドの証明書を作成する Provisioning Profiles

デバッグ確認が必要になりました。
アイパッドのシミュレータ(シュミレータって書きそうになりますが)では、リフレッシュレートが30以下になって動作確認が正常にできません。実機だと60FPSきちんと表示されるので、シミュレータの限界になるのでしょうね。

一つのAppIDで2つのデバイスを登録したprovisioning profileを作成しました。
アイパッドを新規にデバイスとして登録しました。
以下はその追加手順です。
なお、書籍の情報をたどりながら作業をしましたので、古い情報で作業をしたり、iOS Dev Centerのページが変わっていたりします。

前提条件として
アイフォン1機はすでに、登録されており、複数のアプリの登録をすでに実施した後のアイパッド実機の追加登録になります。
複数のAppIDが存在します。

参考サイト
App Storeへのアプリの登録手順 | 田村倉庫

複数のMacで開発記事アイフォンアプリiPhoneを作るときに複数台のMacで開発するときに証明書の認証をどうすれば良いのか?

作業日は、2013年6月8日です。
以下は作業したとおりに、画面キャプチャしながら、登録を進めました。そのため、正しい手順になっていないことがあります。
<AppIDの追加>その後、2台目の実機(アイパッド)登録になります。1台目はアイフォンで登録済みです。
1.iOS Dev Centerにログイン(すでにデベロッパー会員になっていることが条件です。)
https://developer.apple.com/devcenter/ios/index.action

2.画面右上の方の[Certificates, Identifiers & Profiles]をクリック

>>>>間違って別のところに進みました。AppIDの追加の場合は、下の3Aから進めてください。
(誤り)3.iOS Appsのグループの中のProvisioning Profilesをクリック

新しいプロファイルを追加
(誤り)4.画面の右側の十時アイコン(Add)をクリック
画像00
00
(誤り)5.Development の iOS App Developmentのラジオチェックを選択
01jpg
01
(誤り)6.Add iOS Provisioning Profileページで、Select App ID. となります。
でも、失敗。ページが違います。
02。jpg
02
AppIDを追加したいのですが。
>>>>

03。jpg
03
3A.Registering an App IDのページです。

04。jpg
04
05。jpg
05
06。jpg
06
Wildcard App IDで自分のドメインを登録

4A.先に進んで、完了。これで、新しくAppIDを登録できました。

5A.次に、先ほどの誤りの3に戻って、Provisioning Profilesをクリック
6A.画面の右側の十時アイコン(Add)をクリック
(誤り)5.Development の iOS App Developmentのラジオチェックを選択
(誤り)6.Add iOS Provisioning Profileページで、Select App ID. となります。
先ほど、作成したAppIDを選択
07。jpg
07
7.自分の登録を確認
08。jpg
08

8.端末を選択
今はアイフォン一台です。とりあえず、このまま進みますが、
アイパッドを新規に登録したかったのですが。
ここで、十時アイコン(Add)をクリックします。
が一緒でした。
What type of provisioning profile do you need?の画面になりました。
09。jpg
09
>>結局同じ画面を繰り返しでした。

とりあえず、まず、アイフォンの実機を登録します。

9.Name this profile and generate.
Profile Name:を登録します。ここは開発者がわかる名称で良いそうです。
iPadDonguri_profile
としました。
10。jpg
10
10。Your provisioning profile is ready.
ダウンロードできました。
11。jpg
11
<実機追加>
画面を見て気づきました。左側にDevicesとありました。
12。jpg
ここをクリックします。
12
1 iOS Devices
13。jpg
13
登録された実機デバイスが表示されています。
今回iPadを登録したいので、十字キーを押します。

2.Registering a New Device or Multiple Devices
ようやくアイパッドを登録して、実機でアプリの確認ができそうです。
UDIDは、iTunesの概要タブのシリアル番号をクリックすると表示されます。
14.jpg
14
このまま登録を進めます。

15。jpg
15
完了

そして、また、
IdentifiersのAppIDsで、先ほど作成したAppIDで二つの端末で使用すれば良いのでしょうか(登録で着るみたいです。)

16。jpg
16
違いました。
ここではなにもできません。

Provisioning Profielsで、アイパッドの実機を登録できるでしょうか?
17。jpg
17
先ほど登録したiPadDonguri_profileをクリックします。

Device 1totalと記載されていて、Editボタンがありました。もしかしてできるかもしれません。
Editボタンをクリックします。
18.jpg
18
Deviceが表示されました。
これまでの実機追加のところで追加アイパッドが表示されています。選択します。
19。jpg
19
Your provisioning profile is ready.ページで
ダウンロードします。
20。jpg
20

(ここは不要みたいでした。)
>>>>>>>
<キーチェーンアクセスの設定>
キーチェーンアクセスを開き、
メニューのキーチェーンアクセス、証明書アシスタント、認証局に証明書を要求を選択します。
21。jpg
21
そのまま、進め、ファイルを保存します。私は、書類に入れました。
>>>>>>>

<iPadDonguri_profile(1).mobileprovision、iOS devで作成したファイルをオーガナイザに登録>
先ほど、iOS devで作成したファイル、ここでは書類に保存したものを、オーガナイザに登録します。
ここでは、XCODEのアイコンにドラッグします。するとオーガナイザ起動します。
このとき、新しい端末のアイパッドをMacに接続しておきます。

そして、アイパッドの項目を選択し、UseDeviceをクリックします。
22。jpg
22
そして、アプリを実機で確認するために、端末を設定して実行を押しました。

エラーが表示:
Code Sign error: A valid provisioning profile matching the application’s Identifier ‘com.yourcompany.e-Don’ could not be found

‘com.yourcompany.e-Don’を
‘com.enjoygoodtown.e-Don’
にしました。

再度実行して、無事新しく登録したアイパッドで実機確認ができました。

今日のエラー tree.hがないといわれて、libxmlを追加したらArgument list too longエラー

今日のエラー tree.hがないといわれて、libxmlを追加したらArgument list too longエラー

サンプルコードをダウンロードしてコンパイルすると、警告とエラーが表示されました。
そこで、

Xcode4でlibxmlをインクルードする際の注意点(外部サイト)

を参考にして、

(1)Link binary With Librariesでlibxmlを追加し、

(2)「Build Setting」→「Search Pass」→「Header Search Paths」でPathに$(SDK_DIR)/usr/include/libxml2 を指定

すると、

Argument list too long: recursive header expansion failed at /Applications/Audacity/help/manual/m/images/0/08.
引数が長すぎる。
と言われても、こちらがしていしているわけではないのに、
しらべると
なにやら、パスを短くするようにしたらよいみたいな英文が発見されるも具体的な対処が見つからず。再帰が何とかという英文もあったがそのときは意味不明。

そこで、パスを設定した先ほどのところの設定をみると、recursive(再帰)、non(再帰しない)とあったので、再帰しないNon-recursiveを選択。

「Build Setting」→「Search Pass」→「Header Search Paths」でPathに$(SDK_DIR)/usr/include/libxml2 を指定のところで、no-recursiveを選択すると、エラーがなくなりました。

X-CODE4.6.2です。

前回のエラー