2017-12-20 12 views
1

ファイルを開くXcodeアプリケーション(macOS)にCモジュールがあります。macOSアプリケーションが存在するファイルを開くことができません

char fname1 [1028] = "/Library/Preferences/tbupdd.ini"; 
FILE * fp; 

fp = fopen(fname1, "r"); 

if (fp == NULL) 
{ 
    perror("error opening updd.ini"); 
    printf("File %s not found, use another method for getting version\n", fname1); 
    exit(1); 
} 

ファイルが存在し、私はターミナルでそれを読むことができます:ここで

はコードです。

$ ls -l /Library/Preferences/tbupdd.ini 
-rw-r--r-- 1 root wheel 25584 20 Dec 15:05 /Library/Preferences/tbupdd.ini 

私はXcodeのは、作業ディレクトリを持っていることを理解してそれは上記の絶対パスに影響を与えるでしょう?しかし、Xcodeで、このアプリを実行すると、ファイルは、次の権限を持っている

error opening updd.ini: Operation not permitted 

を与えていますか

答えて

1

最新のmacOSアプリケーションでは、サンドボックス内のファイルを更新することができるだけのサンドボックスが採用されています。 File System Programming Guide: The Library Directory Stores App-Specific Filesを参照してください。また、About App Sandboxを参照してください。

私はそのようなハードコーディングされたパスを使用することを推奨しません。私は返すNSFileManager

​​

からライブラリフォルダを取得することをお勧めしたい:

/Users/{username}/Library/Containers/{com.domain.app}/Data/Library

これをC関数に渡すことができます。


ところで、Appleは、明示的に、我々はPreferencesサブフォルダ内のファイルを作成するべきではないと助言しています。彼らはwarn us

このディレクトリには、アプリケーション固有の設定ファイルが含まれています。このディレクトリに自分でファイルを作成すべきではありません。代わりに、NSUserDefaultsクラスまたはCFPreferences APIを使用して、アプリの設定値を取得および設定します。

+0

ありがとうございました。ところで、このファイルをPreferencesフォルダに置いたのは私のことではありません。そのサードパーティは、自分が行ったことと一緒に動作するものを書こうとしています。 – TenG

+0

これは、Xcodeアプリケーションから "/Library/Preferences/tbupdd.ini"というパスを持つファイルにアクセスする手段がないことを意味しますか?あるいは、何らかの仮想マッピングが進行中ですか? – TenG

+0

あなたは 'NSOpenPanel'を' ini'ファイル(本当に醜いUXです)を選択することができます。また、ターゲット設定の "Capabilities"タブ(AFAIKは、 App Store上のアプリとスマートエンドユーザは、潜在的に導入されるサンドボックスのないアプリのセキュリティ問題のためにインストールすることを嫌うだろう)。たぶん誰か他の人がこのことを知っているかもしれませんが、私はそうではありません。 – Rob

関連する問題