ユーザーがアプリケーションを削除した後、いくつかのデータを保持する方法のiOSデベロッパ

現像工程では、我々は時々ユーザ次回は、今回我々はFindUIPasteboardと剪断キーチェーンキーチェーンバージョンを使用UIPasteboardを使用することができ、使用時にアプリケーションをインストールする際に、ユーザーに格納された情報の一部を削除します

カットバージョン
カットバージョンは、次の2つに分割され
UIPasteboardNameGeneralとUIPasteboardNameFind
アプリケーションを削除した後、システムレベルのデータを保持することが可能であり、どちらも

開発、私たちはしばしばなどUUID、ユーザー名、パスワード、として、ユーザーが保存しておきたいアプリケーションを削除した後UIPasteboard UIPasteboardは、いくつかのデータを保存するために検索を使用
ここでUIPasteboardにUUIDの保存コードで
UDIDを作成するには

+(NSStringの*)_uuidCreateNewUDID {
NSStringの* _openUDID =ゼロ、

CFUUIDRefのUUID = CFUUIDCreate(kCFAllocatorDefault)。
CFStringRefのCFString = CFUUIDCreateString(kCFAllocatorDefault、UUID)。
CONSTのchar * CSTR = CFStringGetCStringPtr(のCFString、CFStringGetFastestEncoding(のCFString))。
unsigned char型の結果[16]。
CC_MD5(CSTR、(unsigned int型)strlenを(CSTR)、結果);
CFRelease(UUID)。

_openUDID = [NSStringのstringWithFormat:
"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%08X" @、
結果[0]は、結果[1]結果[2]、[3]、生じ
た結果を[4]結果[5]、結果[6]、結果[7]、
結果[8]結果[9]、[10]を生じ、結果[11]、
[12]結果[13]結果[14]結果[15]は、結果
(unsigned int型)(arc4random()%NSUIntegerMaxを)]。

CFRelease(のCFString)。

返す_openUDID;
}

クリップボードに保存されたUDID

NSStringの* openudid = [自己_uuidCreateNewUDID]。
NSStringの* checkOpenUDID = [openudid stringByAppendingFormat:kOpenUDIDAdd、ゼロ]。

//先把UDID存入字典
NSMutableDictionary * localDict = [NSMutableDictionary dictionaryWithCapacity:2]。
[localDictのsetObject:openudid forKey:kOpenUDIDKey]。
[localDictのsetObject:[checkOpenUDID MD5] forKey:kCheckOpenUDIDKey]。

クリップボードへ//同期データ
UIPasteboard slotPB * = [UIPasteboard pasteboardWithNameは:kOpenUDIDPB作成:YES];
//永久保存に設定
[slotPB setPersistent:YES];
//剪断プレート辞書
[slotPBのsetData:[NSKeyedArchiver archivedDataWithRootObject:localDict] forPasteboardType:kOpenUDIDDict]は ;

注意:ユーザーが、我々は、ユーザが内部のプライバシーを追跡リミット広告を閉じ、その後、ユーザーが同時にアプリケーションを削除するとき、データのカットバージョンがクリアされることがわかった製品を使用して(それも可能であるハードディスクので、緊張容量はクリアするために戻って行きました)

キーホルダーキーチェーン
のiOSキーチェーンサービスは、安全な個人情報(パスワード、シリアル番号、証明書など)の方法を提供して保存します。イオス各プログラムは独立したキーチェーンのストレージを持っています。IOS 3.0、実現可能なクロスプログラムの共有キーチェーンを開始します。
ここではキーチェーンアクセスのユーザー名とパスワードを使用して実装されます。
Appleは既存のクラスが良いキーチェーンをカプセル化している、KeychainItemWrapper.hとKeychainItemWrapper.mファイルは、インスタンスGenericKeychainで見つけることができます。
しかし、ここで私はちょうどあなたが、アップルが提供するクラスを持ち、十分に簡単に実装するために、独自のクラスを書いていない、ユーザー名とパスワードにアクセスする必要があります。

KeychainManager.h

#import <財団/ Foundation.h>

KeychainManagerの@interface:NSObjectの
+(KeychainManager *)デフォルト;
//辞書ストレージオブジェクトをキーチェーン
- (ボイド)保存:(NSStringの*)データサービス:(ID)データ;
//キーチェーン辞書に基づいてオブジェクトを読み取ります
- (上記のID)ロード:(NSStringの*)サービス;
//キーチェーン内のデータを削除
- (ボイド)削除:(NSStringの*)サービス;
@end

KeychainManager.m

#importを "KeychainManager.h"

@implementation KeychainManager
+(KeychainManager *)デフォルト
{
静的KeychainManager * keychainManager =ゼロ、
IF(keychainManager == NIL)
{
keychainManager = [[KeychainManager ALLOC] INIT]。
}
keychainManagerを返します。
}
- (NSMutableDictionary *)getKeychainQuery:(NSStringの*)サービス{
[NSMutableDictionary dictionaryWithObjectsAndKeys返す:
(ID)kSecClassGenericPassword、(ID)kSecClass、
サービス、(ID)kSecAttrService、
サービス、(ID)kSecAttrAccount、
(ID)kSecAttrAccessibleAfterFirstUnlock、(IDを)kSecAttrAccessible、
ゼロ]。
}

- (無効)、保存:(NSStringの*)サービスデータ(ID)データ{
//取得検索辞書
NSMutableDictionary * keychainQuery = [セルフgetKeychainQuery:サービス];
//古いアイテムを削除する前に、新しい項目の追加
SecItemDelete((CFDictionaryRef)keychainQueryを)。
//辞書を検索するための新しいオブジェクトを追加します(注意:データ・フォーマット)
[keychainQueryのsetObject:[NSKeyedArchiver archivedDataWithRootObject:データ] forKey:(ID)kSecValueData];
//検索辞書をキーチェーンに項目追加
SecItemAdd((CFDictionaryRef)keychainQuery、NULL)を。
}

- (ID)荷重:(NSStringの*)サービス{
ID RET =ゼロ、
NSMutableDictionary * keychainQuery = [セルフgetKeychainQuery:サービス];
//検索設定の構成
我々は唯一の単一の属性が返されることを期待している私たちの単純なケース(パスワード)で、我々はkCFBooleanTrueに属性kSecReturnDataを設定することができるので、//を
[keychainQueryのsetObject:(ID)kCFBooleanTrue forKey:(ID)kSecReturnData] ;
[keychainQueryのsetObject(ID)kSecMatchLimitOne forKey:(ID)kSecMatchLimit]。
CFDataRef KEYDATA = NULL;
IF(SecItemCopyMatching((CFDictionaryRef)keychainQuery、(CFTypeRef *)&キーデータ)==はnoErr){
@try {
RET = [NSKeyedUnarchiver unarchiveObjectWithData:(__ブリッジのNSData *)キーデータ]。
} @catch(NSException *電子){
NSLog( "%の@のアーカイブを解除に失敗しました:%の@" @、サービス、E);
} @finally {
}
}
IF(キーデータ)
CFRelease(キーデータ)。
RETを返します。
}

- (ボイド)を削除:(NSStringの*)サービス{
NSMutableDictionary * keychainQuery = [セルフgetKeychainQuery:サービス]。
SecItemDelete((CFDictionaryRef)keychainQuery)。
}
@end

在アプリデリゲート的使用

- (BOOL)アプリケーション:(のUIApplication *)アプリケーションdidFinishLaunchingWithOptions:(NSDictionaryの*)launchOptions {
KeychainManager *マネージャ= [KeychainManagerデフォルト]。

NSStringの*データ= [マネージャのロード: "がmyName" @]。
(データ== nilを){場合
のNSLog(@ "保存");
NSStringの* dataString = @ "我是谁";
[マネージャが保存:@ "がmyName"データを:dataString];
}
のNSLog(データ、 "データ=%の@" @)。

YESリターン;
}

あなたは、保存に印刷するときにアプリを削除した後、あなたが実行している場合は、アプリを初めて実行した場合にのみ見つけることが、データを消去されませんアプリケーションを実行
--------------- ------
免責事項:この記事はCSDNブロガー元の記事「クリス・ガードナー」で、再現CC BY-SA 4.0の著作権協定、以下、オリジナルのソースリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/u014410695/article/details/50623591

OSアプリケーションのアップグレードファイルを留保

 

デバイスにローカル保存されたデータのiOSデバイスを、ダウンロードするには、このような問題は、多数のユーザーは、ユーザーがアプリケーション自体をアップグレードする場合、これらのファイルがまだそこにある、あります。

公式の説明とStackflow上のいくつかの命令を探します

あなたは、あなたのアプリケーションのファイルを置くべき場所

長い時間をかけてから、iOSデバイス上の同期とバックアップのプロセスを防ぐために、アプリのホームディレクトリ内のファイルを置く場所について選択的で。大きなファイルを保存するアプリは、iTunesやiCloud上へのバックアップのプロセスを遅くすることができます。これらのアプリはまた、iCloud上にそのアプリのデータのバックアップをアプリを削除するか、または無効にするには、ユーザを促すことが、ユーザの使用可能なストレージを大量に消費することができます。このことを念頭に、あなたは以下のガイドラインに従ってアプリのデータを保存する必要があります。

  • <APPLICATION_HOME> /ドキュメント/ユーザデータを入れてください。ユーザーデータは、ユーザーのドキュメントとその他のユーザー生成コンテンツとして、あなたのアプリケーションで再作成することはできません任意のデータです。

  • サポートファイル、ファイル、アプリケーションのダウンロードを扱うか生成し、必要に応じ-のように2つの方法のいずれか再作成することができます。

    • iOSの5.0およびそれ以前のバージョンでは、バックアップされてからそれらを防ぐために、<APPLICATION_HOME> /ライブラリ/キャッシュディレクトリにサポートファイルを置きます

    • iOS 5.0.1以降では、<APPLICATION_HOME> /ライブラリ/ Application Supportディレクトリにサポートファイルを配置し、それらに拡張属性をthecom.apple.MobileBackup適用されます。この属性は、iTunesやiCloud上にバックアップされてからファイルを防ぎます。あなたがサポートファイルの数が多い場合は、カスタムサブディレクトリに保存し、ちょうどディレクトリに拡張属性を適用することができます。

  • <APPLICATION_HOME> /ライブラリ/キャッシュディレクトリ内のデータ・キャッシュ・ファイルを置きます。あなたはこのディレクトリに置くべきファイルの例としては、雑誌、新聞、地図アプリケーションで使用されるようなデータベースキャッシュファイルやダウンロードコンテンツを、含まれます(ただし、これらに限定されません)。アプリは優雅にキャッシュされたデータは、ディスク領域を解放するために、システムによって削除された状況を処理することができるはずです。

  • <APPLICATION_HOME> / tmpディレクトリに一時的にデータを置きます。一時的なデータは、あなたが長期間持続する必要はありません任意のデータを含みます。彼らは、ユーザーのデバイス上のスペースを消費し続けないように、あなたも一緒に行われ、それらのファイルを削除することを忘れないでください。

言い換えれば、雑誌、新聞、ビデオか何かを含む、インターネットからダウンロードしたものの一般的な内容は、配置する必要があります。<APPLICATION_HOME> /ライブラリ/キャッシュディレクトリ

<APPLICATION_HOME> /ライブラリ/

このディレクトリは、ユーザーデータファイルでないファイルの最上位ディレクトリです。あなたは、典型的には、いくつかの標準的なサブディレクトリのいずれかにファイルを置くが、あなたはまた、あなたがバックアップしますが、ユーザーにさらされていないたいファイルのカスタムサブディレクトリを作成することができます。あなたはユーザーデータファイルについては、このディレクトリを使用しないでください。

(キャッシュサブディレクトリを除く)、このディレクトリの内容はiTunesによってバックアップされています。

ライブラリディレクトリに関する追加情報については、  「ライブラリディレクトリストアのApp固有のファイルを。」

そのディレクトリのライブラリの内容は、それはここに置かれたコンテンツファイルをダウンロードするには、ネットワークがバックアップされないと言うことです、キャッシュディレクトリを除き、iTunesのでバックアップされます

 

キャッシュ

あなたのアプリが簡単に再作成することができます任意のアプリケーション固有のサポートファイルを書き込むために、このディレクトリを使用します。アプリはこのディレクトリの内容を管理するため、必要に応じてファイルを追加し、削除するための一般的責任があります。

iOS 2.2以降では、このディレクトリの内容はiTunesによってバックアップされません。また、iTunesは、デバイスの完全復元中に、このディレクトリ内のファイルを削除します。

システムは、ディスクスペースが非常に低いときのiOS 5.0以降では、システムがまれにキャッシュディレクトリを削除することができます。アプリが動作している間に発生することはありません。ただし、iTunesが復元することを認識しておく必要があり、必ずしもキャッシュディレクトリを消去することができ、その下唯一の条件ではありません。

上記の通常の状況下では、ライブラリ/キャッシュディレクトリの下に、より明確に書かれて削除されていない、私は理解するだけでなく、stackoverflowのユーザー、アプリケーションのアップグレードは、彼らはまた、削除されないことを証明した、実際には、特定のアプリケーションのアップグレードシステム動作はようなものです:

 

Files Saved During Application Updates When a user downloads an application update, iTunes installs the update in a new application directory. It then moves the user’s data files from the old installation over to the new application directory before deleting the old installation. Files in the following directories are guaranteed to be preserved during the update process:

  • Application_Home/Documents
  • Application_Home/Library

Although files in other user directories may also be moved over, you should not rely on them being present after an update.

系统先新建一个应用目录,然后安装一个新版本应用,然后再把旧版本的应用数据拷贝过来,然后再删除旧版本的应用安装目录。

最后注意一下,Library/Caches目录下的数据虽然在一般情况下不会被删除,但是在系统恢复和其他一些罕见的情况下(比如非常底的磁盘空间条件下有可能)会被清除,所以你的程序每次都要检查一些,这些文件都还在不在了,不在的话只能重新下了。

Application_Home/Library/Caches Use this directory to write any application-specific support files that you want to persist between launches of the application or during application updates. Your application is generally responsible for adding and removing these files. It should also be able to re-create these files as needed because iTunes removes them during a full restoration of the device. In iOS 2.2 and later, the contents of this directory are not backed up by iTunes.

 

参考连接:http://stackoverflow.com/questions/7155964/will-application-home-library-caches-be-clear-on-app-update/7277797#7277797

File System Programming Guide

https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW1

 

转:https://blog.csdn.net/messyhari/article/details/50481356

 

おすすめ

転載: www.cnblogs.com/xiaoshen666/p/11355888.html
おすすめ