Registrando seu aplicativo para poder abrir imagens de outros aplicativos

Cenário

Para seu aplicativo, para a caixa de diálogo ‘Abrir com …’ disponível globalmente que outros aplicativos usam, você precisa:

  1. Registre seu aplicativo como tipos de arquivos de manipulação (por exemplo, imagens, PDFs, etc.)
  2. Implementar um método que é chamado em seu aplicativo quando outro aplicativo passa um arquivo para você

Para imagens:

1. Registre seu aplicativo como aceitando imagens adicionando dados ao arquivo plist.

Adicione CFBundleDocumentTypes ao plist (no Rakefile):

app.info_plist['CFBundleDocumentTypes'] = [{
"CFBundleTypeExtensions" => ["pdf"],
"CFBundleTypeName" => "public.pdf",
"CFBundleTypeIconFile" => "app.icns",
"LSItemContentTypes" => ["public.pdf"],
"CFBundleTypeRole" => "Editor", #or Viewer
"LSHandlerRank" => "Alternate"
},
{"CFBundleTypeExtensions" => ["png"],
"CFBundleTypeName" => "public.png",
"CFBundleTypeIconFile" => "app.icns",
"LSItemContentTypes" => ["public.png"],
"CFBundleTypeRole" => "Editor", #or Viewer
"LSHandlerRank" => "Alternate"
}]

Adicione UTImportedTypeDeclarations ao seu plist (no Rakefile):

    app.info_plist['UTImportedTypeDeclarations'] = [{
"UTTypeConformsTo" => ["public.data"],
"UTTypeIdentifier" => "public.pdf",
"UTTypeTagSpecification" => {
"com.apple.ostype" => "PDF",
"public.mime-type" => "application\/pdf",
"public.filename-extension" => ["pdf"]
}}, {
"UTTypeConformsTo" => ["public.image"],
"UTTypeIdentifier" => "public.png",
"UTTypeTagSpecification" => {
"com.apple.ostype" => "PNG",
"public.mime-type" => "image\/png",
"public.filename-extension" => ["png"]
}
}]
end

Mais sobre esta etapa aqui: Registrando seu suporte de tipos de arquivo

2. Implementar aplicativo: openURL: sourceApplication: annotation: em seu app_delegate

Este método é chamado quer seu aplicativo já esteja aberto ou não. (Se seu aplicativo não estiver aberto, application: didFinishLaunchingWithOptions: é chamado primeiro.)

Isso é chamado quando outro aplicativo envia um arquivo para o seu aplicativo

def application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
#url.nsdata => data of the file passed
#e.g. open a new view controller
foo
= MyImageManipulatorViewController.alloc.initWithURL(url)
# ...
true
end

Mais sobre esta etapa aqui: Abrindo tipos de arquivos suportados


Nota Você não pode adicionar seu aplicativo à lista de opções de compartilhamento que os aplicativos nativos de fotos e rolo da câmera usam.


Veja também

Visão geral de compartilhamento / abertura de documentos em aplicativos:
Sobre a interação de documentos

Outros tipos de documento:
CFBundleDocumentTypes