カテゴリー別アーカイブ: 24Days Season1 初めてのiPhoneアプリ

「DelphiによるiPhone / iPadアプリ開発コンテスト」にノミネートされた

「DelphiによるiPhone / iPadアプリ開発コンテスト」にノミネートされた。

以下メール

—————————————————————-
このたびは、「DelphiによるiPhone / iPadアプリ開発コンテスト」
にご応募いただき誠にありがとうございます。

皆様からご応募いただきましたアプリについて厳正なる審査の結果、
お客様の「らぶらぶ倫敦」が最終候補に残りました。最優秀賞の発表
は、本日開催する「第26回 エンバカデロ・デベロッパーキャンプ」
の【G6】セッションにて実施いたします。会場にお越しいただけない
方は、Ustreamでライブ中継を視聴いただけます。ぜひご覧ください。

・デベロッパーキャンプ – ライブ中継
http://www.embarcadero.com/jp/developer-camp-japan/live

以上、よろしくお願い致します。

24日目+81 アプリが Ready for Sale になった。

アプリが Ready for Sale になった。

しかし、すぐに
Pending Contract
になったとのメールがきた。

契約が必要らしい。
iTune Connect のトップページから
Contracts, Tax, and Banking
をクリックして、必要事項を記載。

参考:
iPhone使いへの道

10日目 構造体を使ったリスト


unit untTrade;

interface

uses
  untIDateTime,
  untPair,
  untHistoricalList;

type
  TTradeRecord = record
  private
  Public
    Pair    : TPair;
    TimeStep: TTimeStep;

    procedure Init();
    procedure Assign(aTradeRecord: TTradeRecord);
  end;

  TTradeList = record
  private
    function getCount: Integer;
  Public
    Items: Array of TTradeRecord;

    procedure Init();
    procedure Assign(aTradeList: TTradeList);
    procedure Add(aTradeRecord: TTradeRecord);
    property Count: Integer read getCount;

  end;

implementation

{ TTradeRecord }

procedure TTradeRecord.Assign(aTradeRecord: TTradeRecord);
begin
  Self.Pair     := aTradeRecord.Pair;
  Self.TimeStep := aTradeRecord.TimeStep;

end;

procedure TTradeRecord.Init;
begin
  Self.Pair          := peUSDJPY;
  Self.TimeStep.enum := ts1Hour;

end;

{ TTradeList }

procedure TTradeList.Add(aTradeRecord: TTradeRecord);
begin
  SetLength(Self.Items, Length(Self.Items) + 1);
  Self.Items[High(Self.Items)].Assign(aTradeRecord);
end;

procedure TTradeList.Assign(aTradeList: TTradeList);
var
  i: Integer;
begin
  SetLength(Self.Items, aTradeList.Count);
  for i := 0 to Self.Count - 1 do
    Self.Items[i].Assign(aTradeList.Items[i]);
end;

function TTradeList.getCount: Integer;
begin
  Result := Length(Self.Items);
end;

procedure TTradeList.Init;
begin
  SetLength(Self.Items, 0);
end;

end.

24日目+66 Macへの接続がうまくいかないときのチェック

コンピュータの再起動によってipが変わることがあるので以下をチェック

macからpaserverを起動
コマンドプロンプトから ip と入力して 数値を記録

delphi IDE プロジェクトマネージャーのターゲットプラットフォームでiOSシミュレーターを右クリックして、編集の接続をクリックホスト名に先ほど調べた数値を入力

24日目+64 iOS ファイルシステムを調べる

Delphi のサンプルによくあるのだが、プログラムから読み込む画像ファイルや音声ファイルを

StartUp\Documenys\

に配置するとリジェクトされてしまうことがわかる。

では、どこに配置するのか?調査を開始する。

配置マネージャーで wp0.png のリモートパスを
.\image\
に設定して

procedure TForm3.Button1Click(Sender: TObject);
var
tmpFileName: string;
begin
tmpFileName := GetHomePath + PathDelim +
ExtractFileName(ParamStr(0)) + ‘.app’ + PathDelim +
‘image’ + PathDelim +
‘wp0.png’;

Image1.Bitmap.LoadFromFile(tmpFileName);
end;

でOK。

 

 

<Application_Home>/Documents    ユーザーが生成した情報を置く。iTunes によってバックアップされる。

<Application_Home>/Library
ユーザーのデータファイル以外のファイルの最上位ディレクトリ。iTunesによってバックアップされる(ただし、Cachesサブディレクトリは除く)

<Application_Home>/Library/Caches
iTunesによってバックアップされない
<Application_Home>/tmp/
一時ファイルを書き込むために利用、アプリケーションが実行されていないとき、システムが削除する可能性がある。iTunesによってバックアップされない。

ファイルシステムプログラミングガイド

プログラミング雑記

取得した画像をDocumentsディレクトリに適当に格納しといたらappleにrejectされた!

iPhoneアプリ開発、その(230) お前もリジェクトしてやろうか

24日目+56 iTunes Connect に Reject された

Binary Rejected
2.23: Apps must follow the iOS Data Storage Guidelines or they will be rejected

In particular, we found that on launch and/or content download, your app stores 11MB in iCloud. To check how much data your app is storing:

だって。

もう一度、ガイダンスを読んで、規定に合うように書き直すとするか。

24日目+51 iOS シミュレーターの Application not started during startup timeout or has been finished に悩む

iOS シミュレーターの Application not started during startup timeout or has been finished に悩む

iOS シミュレーターのスプラッシュ起動画面が一瞬開いてその後、消えてしまう。

1分後くらいにdelphi のIDE が Application not started during startup timeout or has been finished のメッセージを出して停止する。

検証
・ Delphi でプロジェクト名を変更したために起こったような気がする。
・ 配置マネージャーでの問題のような気がする
・ 新たなダミーのプロジェクトを作って試したところ、iOS シミュレーターは問題なく起動した
・ Debug でも Release でも同様の問題がおこる

24日目+50 App Store にアップロード

Mac の Xcodeのアイコンを右クリックして「パッケージの内容を表示」から Contents/Applications/Application Loader を起動する。

IDとパスワードを入力して、スクラッチディレクトリ
/Users/yourname/RADPAServer/scratch-dir
の下にある .ipa ファイルを選択、アップロード

iOS アプリケーションを App Store への提出用に配置する

24日目+48 AppStoreへの登録

App IDの登録
Apple Developer のページから
Identifiers> Add IDs
で App ID を所得

Provisioning Profileの登録
Provisioning Profiles >Distribution
でプロファイルを generate、次のページで download
ダウンロードファイルをダブルクリックするとXCode Organizer に登録される

アプリ情報の登録
ITunes Connect のページを開き、Manage your app で、Add New App

*iTunes Connection に登録時必要なファイル

A large version of your app icon that will be used on the App Store. It must be at least 72 DPI, in the RGB color space, and 1024 x 1024 pixels (it cannot be scaled up). The file type must be .jpeg, .jpg, .tif, .tiff, or .png. It must be flat artwork without rounded corners.
Screenshots for 3.5-inch iPhone and iPod touch Retina display must be 960×640, 960×600, 640×960 or 640×920 pixels, at least 72 DPI, in the RGB color space, and in the JPG or PNG format.
Screenshots for 4-inch iPhone 5 and iPod touch (5th generation) Retina display must be 1136×640, 1136×600, 640×1136 or 640×1096 pixels, at least 72 DPI, in the RGB color space, and in the JPG or PNG format.
iPad Screenshots must be .jpeg, .jpg, .tif, .tiff, or .png file that is 1024×768, 1024×748, 768×1024, 768×1004, 2048×1536, 2048×1496, 1536×2048 or 1536×2008 pixels, at least 72 DPI, and in the RGB color space

Routing app coverage files (optional) are .geojson files which specify the geographic regions supported by your app. The file can have only one MultiPolygon element. MultiPolygon elements consist of at least one Polygon. Polygons contain at least four coordinate points. Polygon start and end coordinate points must be the same.

すべてのデータを記入、必要ファイルをアップロード save

Choose Another Language で Japanese を Add する

View Dtails をクリックしてアプリの詳細画面へ、ここで右上のボタンをクリックして Export Compliance を入力、暗号技術を使っていないときは、NO

アプリケーションを Mac App Store に提出する場合には、CFBundleIdentifier フィールドに Mac アプリケーションの BundleID を指定する必要があります。 指定しなければ、.pkg ファイルと使用中の Store BundleId が一致しないというメッセージが Mac AppLoader から出力される可能性があります。
http://docwiki.embarcadero.com/RADStudio/XE4/ja/%EF%BC%BB%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%EF%BC%BD

BundleID とは、はApp IDの登録時に入力したものと同じもの、Prefixは必要ないの?

App Storeへのアプリの登録手順

AppStoreへの登録に関するチュートリアル

iTunes Connectでアプリを登録する際に気をつけたいこと

24日目+45 iTune Connect 用 スクリーンショットの撮り方

Delphi から IOSシミュレータで実行。サイズはiOSシミュレーターのメニュのハードウェア>デバイスで設定

MACのiOSシミュレーターをフォーカスして、上部メニューから[ファイル]>[スクリーンショットを保存]をクリック

ホームボタンを押しながら素早くスリープボタン(電源ボタン)を押すという方法もあるが、すべての実機を用意する必要があるので非現実的である。

iMac上でスクリーンショットを撮るには
CommandキーとShiftキーを押したままで4キーを押すと、Mac OS Xのカーソルが十字カーソルに変わり、範囲を自由に決めてスクリーンショットを撮ることができます。

24日目+43 Ad-hoc での配布に成功

*マックでの操作

mac から iOS Provisioning Profits(ditribution) ページから Provisioning Profits > Distributuon から新たな配布をAd-Hocで設定する

できたファイルをダウンロードしてダブルクリック

XCode のOrganaizer のDEVICE から LIBRARY を開いて 新たにできた Profile を 目的機種 の Provisioning Profiles にドラッグアンドドロップ

*ウィンドウズでの操作

プロジェクト>オプションからプロビジョニング
ビルドの種類
> Ad-hoc

配布用証明書
> マックのキーチェーンアクセスを開いて、 iPhone Distribution から始まる証明書をダブルクリックして、サブジェクト名の通称部分をそのまま入力
例: iPhone Distribution: RIGAXXXXXXXXXXX (XXXXXXXXXXXX)

モバイルプロビジョニングプロファイル
> XCode Organaizer のDEVICE から LIBRARY を開いて今回作成したad-hoc用の新たなプロファイルを選択、右クリックしてReveal Profile in Finder をクリックする。パスとファイル名を確認して、これを入力する。
例: /Users/XXXXXXXXXXXXX/Library/MobileDevice/Provisioning Profiles/XXXXX-XXXXX-XXXXX-XXXXX-XXXXX.mobileprovision

プロビジョンニングの設定はは、debug , release の2通りあるので注意が必要

配置は[プロジェクト]>[配置] から 配置ボタンをクリック

インストールはMACからスクラッチディレクトリ
/Users/yourname/RADPAServer/scratch-dir
を開いて。そこにある、ipa ファイルを XCODE organizer の目的機種のApplication にドラッグアンドドロップする。

24日目+43 iPad の実機テストができない

iPhone5 での実機テストは問題なくできたのに、iPad では

unable to install packagee (e800007e)

のメッセージダイアログが現れ、テストができない。

何が問題なのかを一つずつチェックしていく。

・ iPhone5 での実機テストは可能 (接続の問題ではないだろう)

・ iPad の シミュレーターでは問題なし

・ debug なら 配布関係のプロビジョニングは必要ないはず。(iPhone5 ではプロビジョニングしないで動作した)

・ iPad を開発用に登録したがここの部分に何か間違いがあるのか?

・ Mac のキーチェーン関係に何か問題があるのか?

XCode の Organizer – Devices の iPad の Provisoning Profiles にあったAd Hoc用の profile 削除するとエラーが

Unable to locate DeviceSupport directory matched with connected device info ・・

に変わった。しかし、いつの間にか

unable to install packagee (e800007e)

に戻っていた。

解決

iPad のOSバーションが4.32だったので、最新バージョンの6.13にすれば何も問題なく動作するようになった。

落とし穴はどこにだってある。

24日目+29 シンプルなストップウォッチ


unit untStopWatch;

interface

uses
  Windows;

type
  TStopWatch = class
  private
    StartCount: Integer;
    procedure Reset;
  public
    procedure Start;
    function Time : Integer;
  end;

var
 StopWatch: TStopWatch;

implementation

procedure TStopWatch.Reset;
begin
  StartCount := GetTickCount;
end;

procedure TStopWatch.Start;
begin
  Reset();
end;

function TStopWatch.Time: Integer;
begin
  Result := GetTickCount - StartCount;
end;

end.