Usando LSApplicationWorkspace en Swift

Agregué MobileCoreServices.framework a mi proyecto Xcode y tengo la statement import MobileCoreServices en la parte superior de mi file.

Tengo la linea de codigo

let test = LSApplicationWorkspace.defaultWorkSpace()

Y xcode dijo que el Unresolved Identifier LSApplicationWorkspace

Intenté limpiar y rebuild el proyecto. ¿Algunas ideas?

Punto 1: LSApplicationWorkspace es una API privada, por lo que si usa esto y sube su aplicación a la tienda de aplicaciones, será rechazada.

Punto 2: Si tiene alguna aplicación interna y desea usarla en su aplicación, a continuación se encuentra la forma de usarlo.

  1. Agregue Framework de MobileCoreServices en su package
  2. Cree el file LSApplicationWorkspace.h con el código exactamente igual que el código proporcionado aquí " https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/MobileCoreServices.framework/LSApplicationWorkspace.h ".
  3. Ahora agregue este file LSApplicationWorkspace.h en su package
  4. Crea un encabezado de puente para tu aplicación rápida
  5. Agregue #import "LSApplicationWorkspace.h" en su encabezado de puenteo
  6. Ahora agregue import MobileCoreServices en su file actual y agregue su código let test = LSApplicationWorkspace.defaultWorkSpace() , funcionará bien.

NOTA: Para usar cualquier encabezado privado, debe tener que include su file .h en su código. Puede encontrar encabezados privados buscando "encabezados de time de ejecución" en google. Obtendrá todos los encabezados de time de ejecución. Y para include ese encabezado en su código rápido, debe ir a través de puente-encabezado.

El comstackdor Swift le dice que no tiene idea de una class llamada LSApplicationWorkspace. Esto se debe a que es una class privada que no se describe en ningún encabezado disponible para usted como desarrollador de terceros. Si se detecta mediante las API de LSApplicationWorkspace durante la revisión de App Store, su envío será rechazado. Dado que esta class contiene API que cambian entre las versiones del sistema operativo (en virtud de ser indocumentadas y privadas), y las API que por buenas razones de privacidad no están disponibles para los desarrolladores de terceros, su uso es casi una mala idea, incluso si usted es técnico capaz de hacerlo con cualquiera de los siguientes methods.

  1. Cree un file de map de module privado donde importe un encabezado que de alguna manera adquirió para el marco privado que contiene LSApplicationWorkspace . Esta forma de llamar a LSApplicationWorkspace (o cualquier método que involucre el uso de los encabezados para Mobile CoreServices, es decir, cualquier método excepto el performSelector mencionado a continuación) seguramente obtendría la presentación de su aplicación desde la revisión de App Store, porque este método de (en última instancia) Las llamadas al método C serían visibles para los methods de análisis estáticos que Apple ejecuta en su código como parte de la revisión de la App Store.

  2. Utilice NSClassFromString:

 let LSApplicationWorkspace_class:AnyObject = NSClassFromString("LSApplicationWorkspace")! as AnyObject let workspace = LSApplicationWorkspace_class.perform(NSSelectorFromString("defaultWorkspace"))! as AnyObject 

Con el código anterior, ahora obtiene una instancia de LSApplicationWorkspace con la que puede realizar un código con performSelector , en caso de saber a qué selectores responde (… en la versión del sistema operativo en particular en la que se está ejecutando). Sin embargo, hacer algo con LSApplicationWorkspace es probablemente una mala idea.