由于iOS采用的沙盒机制,在安全方面加了砝码,可在我们开发中带来很大的麻烦。程序之间的的文件不能共享。
今天拿到一个很奇葩的问题,要上传本地的本地文件,这需求在安卓上是很容易实现的,直接列出文件点击上传就ok,可iOS没办法文件预览。
在百度上爬了半天才找到解决方法,借助UIActivityViewController这个类去完成。
UIActivityViewController这是系统提供的一个 AirDrop 类似分享的东西,这个界面估计很多人都看到过。
这里可以直接把分享的文件调到你的程序,起原理是,把要分享的文件的在本机的url地址给你的程序,你拿到url地址就能操作了。
实现步骤:
第一步你得在你的程序的info.plist里去配置参数
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>CFBundleTypeName</key>
<string>DOC Document</string>
<key>LSItemContentTypes</key>
<array>
<string>com.microsoft.word.doc</string>
</array>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSHandlerRank</key>
<string>Owner</string>
</dict>
<dict>
<key>CFBundleTypeName</key>
<string>PDF Document</string>
<key>LSItemContentTypes</key>
<array>
<string>com.adobe.pdf</string>
</array>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Alternate</string>
</dict>
</array>
</plist>
这里是在什么类型的文档分享有你的程序,我是只配置了pdf文件和word文件分享时可以调用我的程序。
这样你只要手机安装了你的程序,打开你配置的文档就可以看到有你程序的身影了。
现在问题来了,来你的程序我这边怎么接收呢?
我们在app delegate这个代理文件里,去实现这个方法:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(nonnull NSDictionary<NSString *,id> *)options
{
return YES;
}
这样程序过来就能拿到url了,你可以打印下url就会发现他是在你手机的地址。
参考文档:http://www.jianshu.com/p/88a08d66894f