iOS UIFileSharingEnabled

时间:2023-12-31 11:20:08

一、让iOS App通过iTunes进行文件交换Documents

让iOS App通过iTunes进行文件交换

有一些App需要通过使用iTunes让用户上传和下载文档。要让iOS程序支持iTunes文件交换其实很简单,

只需要在程序的Info.plist里增加一个键:UIFileSharingEnabledApplication supports iTunes file sharing),赋值YES

iOS UIFileSharingEnabled

这样,编译之后进行机上运行的时候,连接设备到iTunes,就能进行文件交换了。

iOS UIFileSharingEnabled

如果是在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下就可以了:

iOS UIFileSharingEnabled

然后在程序中测试文件有没有成功被程序识别:

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";    }

下面是程序在添加文件前后的运行情况:

iOS UIFileSharingEnabled

 

二、App与iTunes文件传输的方法和对iOS App文件结构的说明

就像很多iOS上面的播放器App一样,本文编写一个程序可以通过iTunes往里面放文件,比如编写一个音乐播放器程序,通过itune往里面放歌曲文件,然后通过这个App来播放这首歌曲,首先我创建了一个普通的SingleView程序,叫做FileShareDemo。下面是通过iTunes往App传输文件的截图:

iOS UIFileSharingEnabled

可以看到像GPlayer,AcePlayer播放器,视频资源通过这种方式传输是很普遍的(很多苹果用户确实不知道这样可以传输数据),这里我创建了一个App叫做FileShareDemo,可以看到,也可以往里面拖拽数据,这里拖拽了一首歌2.mp3,但是默认情况下创建的App是不可以出现在左边栏的,需要按下图在plist里面加一行:

iOS UIFileSharingEnabled

接下来的工作是判断有没有导入进去,下面的代码我写在了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直接在这里可以用。

下面再次补充一下文件的结构问题:

iOS UIFileSharingEnabled

每个程序都会包含这几个文件,Documents就是iTunes导入的文稿存储的地方,FileShareDemo是Xcode项目包,如果通过Xcode往项目里放素材什么的都在这里,后两个不知道有什么具体作用。

特别提醒:

如果app不涉及文档的上传和下载,Application supports iTunes file sharing应设置为NO或删除此key,否则会被拒.

参考链接:

https://my.oschina.net/hmj/blog/112592