So-net無料ブログ作成
-| 2013年11月 |2013年12月 ブログトップ

【NSFileManager】ディレクトリの管理

iosではアプリケーションごとにディレクトリを管理できる

□ディレクトリ構造
Application_Home/Documents
Application_Home/Library/Preferences
Application_Home/Library/Caches
Application_Home/tmp

上記ディレクトリのうち、Preferencesは直接アクセスしてはだめで、tmp配下においても自動でクリーンアップされないため、実際に利用するのはDocumentsとCachesの2つ
ただし、Documentsを使うと審査でリジェクトされるので、Cachesが無難

ーーーーーーーーーーーーーーーーーーーーーーー
■ディレクトリの作成
Application_Home/Documents 直下にdogフォルダを作成

NSFileManager* fileManager = [NSFileManager defaultManager];
NSError *error;
// ホームディレクトリを取得
NSString *homeDir = NSHomeDirectory();
// 作成するディレクトリのパスを指定(利用するのはホームディレクトリのDocuments or Caches)
NSString *dirPath3 = [homeDir stringByAppendingPathComponent:@"Documents/dog/"];

// ディレクトリを作成
BOOL result = [fileManager createDirectoryAtPath:dirPath3
withIntermediateDirectories:YES
attributes:nil
error:&error];

if (result) {
NSLog(@"ディレクトリの作成に成功:%@", dirPath3);
} else {
NSLog(@"ディレクトリの作成に失敗:%@", error.description);
}

ーーーーーーーーーーーーーーーーーーーーーーー
■ファイルのコピー
Application_Home/Documents/dog/picture.jpg を
Application_Home/Documents/cat へコピー

NSFileManager* fileManager = [NSFileManager defaultManager];
NSError *error;
//コピー元のパス(Documentsフォルダ)
NSArray *sysPaths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );
NSString *docDirectory = [sysPaths objectAtIndex:0];
//ホームディレクトリ/Documents/dog/picture.jpgのパス
NSString *filePath = [NSString stringWithFormat:@"%@/dog/picture.jpg", docDirectory];

//コピー先のパス
NSString *dirPath = [homeDir stringByAppendingPathComponent:@"Documents/cat/picture.jpg"];
//コピー
BOOL result =[fileManager copyItemAtPath:filePath toPath:dirPath error:nil];
if (result) {
NSLog(@"コピーに成功");
} else {
NSLog(@"コピーに失敗");
}

ーーーーーーーーーーーーーーーーーーーーーーー
■ディレクトリの一覧取得
Application_Home/Documents/cat フォルダのファイル一覧を取得

NSFileManager* fileManager = [NSFileManager defaultManager];
NSError *error;
// ホームディレクトリを取得
NSString *homeDir = NSHomeDirectory();
// パスを指定
NSString *dirPath3 = [homeDir stringByAppendingPathComponent:@"Documents/cat/"];
//パスをlistに入れてログで出力
NSArray *list = [fileManager contentsOfDirectoryAtPath:dirPath3 error:&error];
for (NSString *path in list) {
NSLog(@"catフォルダ:%@", path);
}

ーーーーーーーーーーーーーーーーーーーーーーー
■ファイル削除
Application_Home/Documents/dog/picture.jpg を削除

NSError *error = nil;
NSString *homeDir = NSHomeDirectory();
NSString *filepath = [homeDir stringByAppendingPathComponent:@"Documents/dog/picture.jpg"];
NSURL *pathurl = [NSURL fileURLWithPath:filepath];
//ファイル削除
BOOL result=[[NSFileManager defaultManager] removeItemAtURL:pathurl error:&error];
if (result) {
NSLog(@"削除に成功");
} else {
NSLog(@"削除に失敗");
}



●参考
http://d.hatena.ne.jp/ntaku/20110104/1294146555

[エラー] The archives for In-App Purchase 'プロダクトID' is invalid

Appleのサーバに非消費型のアプリ内課金用コンテンツをアップロードする際、xcodeのorganizerでvalidateをしたら下記エラーが発生

ーーーーーーーーーーーーーーーーーーーーーーーーー
The archives for In-App Purchase 'プロダクトID' is invalid. The package contains an executable at 'Contents/ファイル名' .
ーーーーーーーーーーーーーーーーーーーーーーーーー

【対処】
エラーが出たファイルの権限を変更(全てのユーザに対し、ファイルを読み出し権限のみにする)
具体的には、macでターミナルを起動し下記コマンドを実行
「chmod 444 ’エラーが出たファイル’」

nice!(0)  コメント(0) 

[エラー] Your app contains non-public API Usage

アプリ申請の際、xcodeのorganizerでvalidateをした際に下記エラーが発生

ーーーーーーーーーーーーーーーーーーーーーーーーーー
Your app contains non-public API usage. Please review the errors, correct them, and resubmit your application.
Apps are not permitted to access the UDID and must not use the uniqueIdentifier method of UIDevice. Please update your apps and servers to associate users with the Vendor or Advertising identifiers introduced in iOS 6. if you think this message was sent in error and that you have only used Apple-published APIs in accordance with the guidelines, send the app's nine-digit Apple ID, along with detailed information about why you believe the above APIs were incorrectly flagged, to appreview@apple.com. For further information, visit the Technical Support Information page at http://developer.apple.com/support/technical/.
ーーーーーーーーーーーーーーーーーーーーーーーーーー

【対処】
AdMob を最新版に変更(v6.2 → 6.5)

xcodeでTARGETを選択し
Build Settings->Search Paths->Library Search Pathsで
古いバージョンのAdMobのパスを削除

nice!(0)  コメント(0) 

[エラー] application executable is missing architecture

アプリ申請の際、xcodeのorganizerでvalidateをした際に下記エラーが発生

ーーーーーーーーーーーーーーーーーーーーーーーーー
iPhone/iPod Touch: application executable is missing architecture. At least one of the following architecture(s) must be present: armv6
ーーーーーーーーーーーーーーーーーーーーーーーーー

organizer_error.png

【対処】
xcodeでTARGETを選択し
Deployment InfoのDevelopment Targetを4.1→4.3に変更

Target_4.3.png
nice!(0)  コメント(0) 

[エラー] Unable to determine concrete GCC compiler for file

xcode4.xで作成したプロジェクトをxcode5で開いた(コンパイルした)際に下記エラーが発生

ーーーーーーーーーーーーーーーーーーーー
Unsupported compiler 'com.apple.compilers.llvmgcc42' selected for architecture 'armv7'
Unable to determine concrete GCC compiler for file 〜
ーーーーーーーーーーーーーーーーーーーー

【対処】
xcodeでTARGETを選択し
Build Settings->Build OPtions->compiler for C/C++/ObjectiveCで
Unsupported Compiler(com.apple.compilers.llvmgcc42)を
Default Compiler(Apple LLVM5.0)に変更

タグ:開発 IOS
nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

-|2013年11月 |2013年12月 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。

×

この広告は1年以上新しい記事の更新がないブログに表示されております。