Requisitos previos
Antes de comenzar a migrar tu código, asegúrate de cumplir con estos requisitos:
- ML Kit admite Xcode 13.2.1 o versiones posteriores.
- ML Kit admite iOS 15.5 o versiones posteriores.
- ML Kit no admite arquitecturas de 32 bits (i386 y armv7). ML Kit admite arquitecturas de 64 bits (x86_64 y arm64).
- La biblioteca de ML Kit solo se proporciona como cocoapods. No puedes combinar frameworks y Cocoapods, por lo que, para usar esta biblioteca, primero debes migrar a Cocoapods.
Actualiza CocoaPods
Actualiza las dependencias de los CocoaPods de ML Kit para iOS en el Podfile de tu app:
| API | Nombres anteriores de los pods | Nombres de los nuevos pods | 
|---|---|---|
| Escaneo de códigos de barras | Firebase/MLVision Firebase/MLVisionBarcodeModel | GoogleMLKit/BarcodeScanning | 
| Detección de rostro | Firebase/MLVision Firebase/MLVisionFaceModel | GoogleMLKit/FaceDetection | 
| Etiquetado de imágenes | Firebase/MLVision Firebase/MLVisionLabelModel | GoogleMLKit/ImageLabeling | 
| Detección y seguimiento de objetos | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection | 
| Reconocimiento de texto | Firebase/MLVision Firebase/MLVisionTextModel | GoogleMLKit/TextRecognition | 
| Etiquetado de imágenes con AutoML (modelo incluido) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom | 
| Etiquetado de imágenes con AutoML (descarga de modelos desde Firebase) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom GoogleMLKit/LinkFirebase | 
| ID del idioma | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID | GoogleMLKit/LanguageID | 
| Respuesta inteligente | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply | GoogleMLKit/SmartReply | 
| Traducir | Firebase/MLNaturalLanguage Firebase/MLNLTranslate | GoogleMLKit/Translate | 
Actualiza los nombres de clases, enumeraciones y tipos
En general, las clases, las enumeraciones y los tipos deben cambiar de nombre de la siguiente manera:
- Swift: Quita el prefijo Visionde los nombres de clases y enumeraciones
- Objective-C: Reemplaza los prefijos de enumeración y nombres de clase FIRVisionyFIRporMLK.
Para algunos nombres y tipos de clases, no se aplica esta regla general:
Swift
| Clase o tipo anterior | Clase o tipo nuevo | 
|---|---|
| AutoMLLocalModel | LocalModel | 
| AutoMLRemoteModel | CustomRemoteModel | 
| VisionBarcodeDetectionCallback | BarcodeScanningCallback | 
| VisionBarcodeDetector | BarcodeScanner | 
| VisionBarcodeDetectorOptions | BarcodeScannerOptions | 
| VisionImage | VisionImage (sin cambios) | 
| VisionPoint | VisionPoint (sin cambios) | 
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions | 
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions | 
Objective-C
| Clase o tipo anterior | Clase o tipo nuevo | 
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel | 
| FIRAutoMLRemoteModel | MLKCustomRemoteModel | 
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback | 
| FIRVisionBarcodeDetector | MLKBarcodeScanner | 
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions | 
| FIRVisionImage | MLKVisionImage | 
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions | 
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions | 
| FIRVisionPoint | MLKVisionPoint | 
Objective-C
Actualiza los nombres de los métodos
Actualiza los nombres de los métodos según estas reglas:
- Ya no existen las clases de punto de entrada del dominio ( - Vision,- NaturalLanguage). Se reemplazaron por clases específicas para cada tarea. Reemplaza las llamadas a sus diversos métodos de fábrica para obtener detectores por llamadas directas al método de fábrica de cada detector.
- Se quitaron la clase - VisionImageMetadatay la enumeración- VisionDetectorImageOrientation. Usa la propiedad- orientationde- VisionImagepara especificar la orientación de visualización de una imagen.
- Se cambió el nombre del método - onDeviceTextRecognizerque obtiene una nueva instancia de- TextRecognizera- textRecognizer.
- Se quitó la propiedad de confianza de las clases de resultados de reconocimiento de texto, incluidas - TextElement,- TextLiney- TextBlock.
- Los métodos - onDeviceImageLabelery- onDeviceImageLabeler(options:)para obtener una instancia de- ImageLabelernueva se combinaron y se les cambió el nombre a- imageLabeler(options:).
- Se quitó el método - objectDetectorpara obtener una nueva instancia de- ObjectDetector. Utiliza- objectDetector(options:)en lugar de esta función.
- Se quitó la propiedad - typede- ImageLabelery la propiedad- entityIDde la clase de resultado del etiquetado de imágenes,- ImageLabel.
- Se cambió el nombre de la API de escaneo de códigos de barras - detect(in _:, completion:)a- process(_:, completion:)para que sea coherente con otras APIs de visión.
- Las APIs de Natural Language ahora usan el término "etiqueta de idioma" (según se define en el estándar BCP-47) en lugar de "código de idioma". 
- TranslateLanguageahora usa nombres legibles (como .english) para sus constantes en lugar de etiquetas de idioma ( como .en).
Estos son algunos ejemplos de métodos de Swift antiguos y nuevos:
Antiguo
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
    Nuevo
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    Estos son algunos ejemplos de métodos antiguos y nuevos de Objective-C:
Antiguo
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
Nuevo
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
Cambios específicos de la API
Detección y seguimiento de objetos
Si tu app usa la clasificación de objetos, ten en cuenta que el nuevo SDK cambió la forma en que devuelve la categoría de clasificación para los objetos detectados.
VisionObjectCategory en VisionObject se devuelve como text en un objeto ObjectLabel, en lugar de un número entero. Todas las categorías de cadenas posibles se incluyen en la enumeración DetectedObjectLabel.
Ten en cuenta que se quitó la categoría .unknown. Cuando la confianza de clasificar un objeto es baja, el clasificador no devuelve ninguna etiqueta.
A continuación, se muestra un ejemplo del código Swift anterior y nuevo:
Antiguo
if (object.classificationCategory == .food) {
    ...
}Nuevo
if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}A continuación, se muestra un ejemplo del código Objective-C anterior y nuevo:
Antiguo
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}Nuevo
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}Quita las dependencias de Firebase (opcional)
Este paso solo se aplica cuando se cumplen las siguientes condiciones:
- Firebase ML Kit es el único componente de Firebase que usas.
- Solo usas APIs alojadas en el dispositivo
- No usas la entrega de modelos
Si es así, puedes quitar las dependencias de Firebase después de la migración. Para hacerlo, sigue estos pasos:
- Borra el archivo GoogleService-Info.plist del directorio de tu app y de tu proyecto de Xcode para quitar el archivo de configuración de Firebase.
- Quita cualquier CocoaPod de Firebase, como pod 'Firebase/Analytics', de tu Podfile.
- Quita cualquier inicialización de FirebaseApp, como FirebaseApp.configure(), de tu código.
- Borra tu app de Firebase en Firebase console según las instrucciones del sitio de asistencia de Firebase.
Cómo obtener ayuda
Si tienes algún problema, consulta nuestra página de la comunidad, en la que se describen los canales disponibles para comunicarte con nosotros.
