一、讓iOS App通過iTunes進行文件交換Documents 讓iOS App通過iTunes進行文件交換 有一些App需要通過使用iTunes讓用戶上傳和下載文檔。要讓iOS程式支持iTunes文件交換其實很簡單, 只需要在程式的Info.plist里增加一個鍵:UIFileSharingE ...
一、讓iOS App通過iTunes進行文件交換Documents
讓iOS App通過iTunes進行文件交換
有一些App需要通過使用iTunes讓用戶上傳和下載文檔。要讓iOS程式支持iTunes文件交換其實很簡單,
只需要在程式的Info.plist里增加一個鍵:UIFileSharingEnabled(Application supports iTunes file sharing),賦值YES。
這樣,編譯之後進行機上運行的時候,連接設備到iTunes,就能進行文件交換了。
如果是在iOS Simulator中進行測試,可以把文件放到應用程式的“用戶目錄”的“Documents”下。要知道用戶目錄在OSX下的路徑,
可以NSLog(@"%@", NSHomeDirectory());運行一下就知道了,
用戶家目錄在OSX下的路徑類似這個:
/Users/venj/Library/Application Support/iPhone Simulator/4.3.2/Applications/158C149B-FF57-4C62-AEDB-DFB7A3BD8AFB。
我做了一個簡單的程式進行測試,在Simulator中運行的時候,把文件放到用戶目錄下,下圖是用戶目錄在OSX下的內容,
把文件放到Documents下就可以了:
然後在程式中測試文件有沒有成功被程式識別:
NSFileManager *manager = [NSFileManager defaultManager]; NSString *dbPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"db.sqlite"];
if ([manager fileExistsAtPath:dbPath]) { self.navigationItem.title = @"Ready To Go"; } else { self.navigationItem.title = @"No DB File"; }
下麵是程式在添加文件前後的運行情況:
二、App與iTunes文件傳輸的方法和對iOS App文件結構的說明
就像很多iOS上面的播放器App一樣,本文編寫一個程式可以通過iTunes往裡面放文件,比如編寫一個音樂播放器程式,通過itune往裡面放歌曲文件,然後通過這個App來播放這首歌曲,首先我創建了一個普通的SingleView程式,叫做FileShareDemo。下麵是通過iTunes往App傳輸文件的截圖:
可以看到像GPlayer,AcePlayer播放器,視頻資源通過這種方式傳輸是很普遍的(很多蘋果用戶確實不知道這樣可以傳輸數據),這裡我創建了一個App叫做FileShareDemo,可以看到,也可以往裡面拖拽數據,這裡拖拽了一首歌2.mp3,但是預設情況下創建的App是不可以出現在左邊欄的,需要按下圖在plist裡面加一行:
接下來的工作是判斷有沒有導入進去,下麵的代碼我寫在了viewdidload里:
NSFileManager *manager=[NSFileManager defaultManager];
NSString *path=[[NSHomeDirectory() stringByAppendingPathComponent:@”Documents”] stringByAppendingPathComponent:@”2.mp3″];
if ([manager fileExistsAtPath:path]) {
showLabel.text=@”have file”;
}else {
showLabel.text=@”have no file”;
}
NSLog(@”NSHomeDirectory %@”,NSHomeDirectory());
這裡有幾點要說明,首先NSHomeDirectory()列印出來是
/var/mobile/Applications/8F01293C-C02D-4EF8-A9F7-1A7B10944F33
這個是程式的路徑,8F01293C-C02D-4EF8-A9F7-1A7B10944F33是每個App獨特的標記,比如憤怒的小鳥會是另一串信息,具體幹嘛的不清楚。然後我在後面添加了/Documents和/2.mp3,通過[manager fileExistsAtPath:path]來判斷這個路徑存不存在,用一個label列印出來。如果拖拽進去了可以看到label的內容是“have file”,通過程式運行的label信息可以看到/var/mobile/Applications/8F01293C-C02D-4EF8-A9F7-1A7B10944F33/Documents/2.mp3就是導入的文件的路徑。
之後我們可以通過這段代碼來播放歌曲:
NSError* err;
player = [[AVAudioPlayer alloc]
initWithContentsOfURL:[NSURL fileURLWithPath:path]
error:&err ];
player.volume=0.7;
[player play];
之前的path直接在這裡可以用。
下麵再次補充一下文件的結構問題:
每個程式都會包含這幾個文件,Documents就是iTunes導入的文稿存儲的地方,FileShareDemo是Xcode項目包,如果通過Xcode往項目里放素材什麼的都在這裡,後兩個不知道有什麼具體作用。
特別提醒:
如果app不涉及文檔的上傳和下載,Application supports iTunes file sharing應設置為NO或刪除此key,否則會被拒.
參考鏈接:
https://my.oschina.net/hmj/blog/112592