widgets puede poner como calendario bateria ios widget ios8 ios-app-extension

puede - ¿Cómo crear un widget de Hoy programáticamente sin storyboard en iOS8?



widget en iphone 8 (3)

Intenté eliminar el archivo del guión gráfico y la entrada correspondiente de Info.plist pero esta vez la extensión dejó de funcionar; ni siquiera se inicia desde XCode.

The operation couldn''t be completed. (LaunchServicesError error 0.)

Es fácil en la aplicación regular (que contiene la aplicación) ya que vemos que es el punto de entrada y el delegado de la aplicación, pero ¿cómo hacerlo en las extensiones también?


Eliminar NSExtensionMainStoryboard de Info.plist Agregar NSExtensionPrincipalClass = YourViewController

No te olvides de crear tu propia vista en loadView


FWIW, no funcionó para mí hasta que agregué un prefijo del nombre del módulo para mi clase de controlador de vista Swift, por ejemplo

<key>NSExtension</key> <dict> <!-- ... --> <key>NSExtensionPrincipalClass</key> <string>SafariActionExtension.RootViewController</string> <!-- ... --> </dict>

Probablemente se deba a que la búsqueda de clases para los módulos Swift convierte los nombres de los módulos en prefijo para el nombre de la clase. Por ejemplo, para crear su clase en código, debería escribir NSStringFromClass("SafariActionExtension.RootViewController") , de ahí el prefijo.


Hice los siguientes pasos:

  • Elimina el archivo del guión gráfico de tu proyecto
  • Modificar el info.plist:

Vaya al Diccionario NSExtension, elimine esta clave: NSExtensionMainStoryboard. Reemplácelo con esta clave NSExtensionPrincipalClass y agregue su ViewController como valor, por ejemplo, TodayViewController.

antes de:

<key>NSExtension</key> <dict> <key>NSExtensionMainStoryboard</key> <string>MainInterface</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.widget-extension</string> </dict>

después:

<key>NSExtension</key> <dict> <key>NSExtensionPrincipalClass</key> <string>TodayViewController</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.widget-extension</string> </dict>

  • Si está utilizando Swift, debe habilitar "Contenido incrustado que contiene código Swift" en la configuración de compilación del objetivo. Establézcalo en SÍ.
  • Además, tuve que agregar @objc (TodayViewController) en mi clase TodayViewController (después de las importaciones).

La aplicación debería ejecutarse ahora. Pero había otras dos cosas que tenía que hacer:

  • Crea una vista Obviamente no hay vista creada automáticamente.

Entonces agrega estas líneas:

override func loadView() { view = UIView(frame:CGRect(x:0.0, y:0, width:320.0, height:200.0)) }

  • Y configure la altura de su widget en su método self.preferredContentSize = CGSizeMake(0, 200) : self.preferredContentSize = CGSizeMake(0, 200)