2

私は Delphi XE3 で OSX アプリを開発しており、さまざまな問題が発生しています。最新のものは、Apple Appstore 用に構築されたサンボックス化されたバージョンです。

ユーザーは任意のフォルダーを選択する必要があり、アプリはそれにアクセスする必要があります。OpenDialog に問題があるため、代わりにドラッグ アンド ドロップ機能を使用する必要がありました。
ユーザーがフォルダーをアプリにドラッグすると、サンドボックスがアプリに一時的なアクセスを許可し、すべてが正常に機能します。
アプリの再起動時にこのフォルダーへのアクセスを保持するには、いわゆる「セキュリティ スコープのブックマーク」を使用する必要があります。

2 つの問題があります:
1) 「com.apple.security.files.bookmarks.app-scope」資格を XE3 firemonkey アプリに追加する方法 Project Options->Entitlements では利用できません。「.entitlements」ファイルに手動で追加すると、アプリのビルド時に上書きされます。プロジェクト オプションのリストにないカスタム資格を追加する方法はありますか?

2) ブックマークを作成するには、NSURL.bookmarkDataWithOptionsメソッドを使用する必要があります。このように使用する必要があると思いますが、正確な構文はわかりません。

var
  URL: NSURL;
  Err: NSError;
  Data: NSData;
...
URL := TNSURL.Create;
Data := URL.bookmarkDataWithOptions(NSURLBookmarkCreationWithSecurityScope, nil, @Err);
...

Create の代わりに Wrap(...) を呼び出す必要があるかもしれません。問題1)への答えがなければ意味がないので、私はまだそれを試していません。

Delphi のこれらの問題について誰も書いていないようですが、ここにいる誰かがその経験を持っていることを願っています。

前もって感謝します。

編集:
問題1については、OSX32フォルダーの「.entitlements」ファイルを手動で編集して追加し、上書きされないように読み取り専用に設定しようとしました。もちろん、リンカーがファイルを変更できないと不平を言ったので、それはあまりにも簡単でした...

4

2 に答える 2

0

別の方法として、デプロイメント ページで entitlements-file のチェックボックスを無効にすることもできます。

ただし、注意: Build/Release または App Store/Normal を変更するたびに、delphi はチェックボックスを有効にします。つまり、このファイルが Mac PC に転送されないようにするには、再生ページで再度無効にする必要があります。

ところで、StartAccessingSecurityScopedResource 関数を試してみましたか? MacApi.Foundation ユニットでは、関数は NSURL インターフェイスで宣言されていません。

この機能を使用する方法を見つけましたか?

于 2013-03-17T13:38:20.007 に答える
0

[OK] で、[プロジェクト オプション] > [資格] で利用できない資格を手動で追加する方法をようやく見つけました。

Project Manager で「App Store」ビルドを選択する代わりに、Normal リリース ビルドを選択して、通常どおりアプリケーションをデプロイする必要があります。
アプリケーションは、APP パッケージとして PAServer のスクラッチ ディレクトリにデプロイされます。このパッケージ内には、XML 形式の「Entitlements.plist」ファイルがあり、テキスト エディターで編集できます。ファイルを開くと、新しい資格を追加する方法は明らかです。

編集後、アプリを手動でコード署名し、パッケージを準備する必要があります。Delphi IDE を使用するよりも少し複雑ですが、Embarcaderoおよび Apple の Web サイトに説明があり、実際には問題なく実行できました。

bookmarkDataWithOptions 関数はまだ試していません。

于 2013-02-07T16:53:46.583 に答える