CocoaPods se da cuenta de la biblioteca de administración, la biblioteca de versiones y la creación de componentes

CocoaPods administra bibliotecas de terceros

1. Generepod init automáticamente Podfile :
Inserte la descripción de la imagen aquí

2. vim PodfileCancele el comentario de la plataforma, comente use_frameworks! Use la biblioteca estática, agregue pod 'AFNetworking', '~> 3.2.1':
Inserte la descripción de la imagen aquí

  • 2.1. Si no se usa use_frameworks!, El archivo .a se generará en Productos del proyecto Pods (el ícono azul al frente); si se usa use_frameworks!, Se generará el archivo .framework.

3. Ejecute para pod installgenerar el archivo CBD.xcworkspace.

CocoaPods crea tu propia biblioteca

Crear un proyecto y un marco compuestos

1. Cree un proyecto común:
Inserte la descripción de la imagen aquí
2. Haga clic en el signo "+" en la esquina inferior izquierda de TARGETS, agregue un Target y seleccione "iOS" -> "Framework & Library" -> "Framework".
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Una vez creado el Framework, habrá un directorio "RCUtility" adicional en el panel de navegación izquierdo, y un "RCUtility" adicional en el panel central TARGETS.
TARGETS selecciona RCUtility, y Mach-O Type en Build Settings es "Dynamic Library" (la biblioteca dinámica se selecciona aquí y no afecta a otros proyectos, como la elección de enlace estático o enlace dinámico cuando se usa esta biblioteca en CBD. la configuración aquí solo afecta la configuración de compilación de este proyecto) (Framework es un método de empaquetado que incluye archivos binarios .a + archivos de recursos de paquete + archivos de encabezado .h, no necesariamente una biblioteca de enlaces dinámicos, pero también se pueden usar enlaces estáticos).
Inserte la descripción de la imagen aquí
3. Configuración del marco:

  • Establezca el prefijo : seleccione el proyecto "RCUtilityDemo" en el panel "Navegador de proyectos" de la izquierda (el icono de la izquierda es azul en lugar de amarillo), y abra el "Documento de proyecto" -> "Prefijo de clase" en el "Archivo Inspector "panel a la derecha". Complete el prefijo, como RC, de modo que las clases recién creadas reciban automáticamente el nombre de RC.
  • Establezca el esquema : seleccione "RCUtility" (no RCUtilityDemo) en el lado derecho del botón Detener (Generar y luego botón Ejecutar a la izquierda), haga clic nuevamente para seleccionar "Editar esquema ...", seleccione "Ejecutar" en la ventana emergente -up panel, y "Información" a la izquierda "->" Configuración de compilación "se cambia a" Liberar ".
  • Establezca la configuración de compilación : OBJETIVOS seleccione RCUtility y establezca "Construir solo architchtura activa" -> "Liberar" en Configuración de compilación en NO (la depuración no se puede modificar).

4, Framework para crear clases y el proyecto principal usando Framework :

  • 4.1. Seleccione el directorio "RCUtility" en el panel de navegación (tenga en cuenta que no es el directorio RCUtilityDemo), cree una nueva clase y agregue este archivo .h de clase a "Build Phases" -> "Headers" -> "Public" (de forma predeterminada en el proyecto, haga clic con el botón derecho en Seleccionar "Mover a grupo público" para este archivo).

  • 4.2. Utilizar Framework en el proyecto principal:

    • 4.2.1 OBJETIVOS -> "RCUtilityDemo" -> "Vincular binarios con bibliotecas" se agrega a RCUtility.framework (se ha agregado por defecto).
      Inserte la descripción de la imagen aquí
    • 4.2.2 Importe el archivo de encabezado .h de una determinada clase de Framework creado por usted mismo en el archivo de clase .m del proyecto principal para usar los métodos de esta clase.

Código alojado en GitHub

1. Almacén local :

  • 1.1 En la terminal, vaya al directorio RCUtilityDemo (que contiene RCUtility, RCUtilityDemo y RCUtilityDemo.xcodeproj) y ejecute git init.
  • 1.2. Cree .gitignore (agregue un repositorio local en Sourcetree, puede ver qué archivos se han modificado y qué archivos deben agregarse a .gitignore), y luego confirme todos los archivos.

2. Almacén remoto :

  • 2.1. Cree un nuevo almacén en GitHub, complete el nombre RCUtility, seleccione Público y desmarque los archivos README para crear un almacén en blanco.
  • 2.2 Almacén remoto asociado: git remote add origin https://github.com/rccrx/RCUtility.git, git push -u origin master.

Publicar en CocoaPods

1. Cd al directorio RCUtilityDemo y ejecute el pod spec create RCUtilityarchivo creado RCUtility.podspec (los comentarios del archivo generado tendrán descripciones de cada parámetro, aunque estos comentarios deben eliminarse al final).
2. Modifique el archivo RCUtility.podspec de la siguiente manera:

Pod::Spec.new do |spec|

  spec.name         = "RCUtility"
  spec.version      = "0.0.1"
  spec.summary      = "A short description of RCUtility."
  spec.homepage     = "https://github.com/rccrx/RCUtility"
  spec.license      = "MIT"
  spec.author             = {
    
     "rccrx" => "[email protected]" }
  spec.platform     = :ios, "9.0"
  spec.source       = {
    
     :git => "https://github.com/rccrx/RCUtility.git", :tag => spec.version }
  spec.source_files  = "RCUtility"
  spec.requires_arc = true

end

3. Agregue el archivo de LICENCIA :

  • 3.1 Haga clic en "Agregar archivo" -> "Crear nuevo archivo" en GitHub.
    Inserte la descripción de la imagen aquí
  • 3.2 Complete LICENCIA, el botón "Elija una plantilla de licencia" aparecerá a la derecha, haga clic para saltar a la página.
    Inserte la descripción de la imagen aquí
  • 3.3. Seleccione "Licencia MIT", haga clic en "Revisar y enviar",
    Inserte la descripción de la imagen aquí
  • 3.4 Seleccione "Confirmar directamente con la rama maestra" y haga clic en "Confirmar nuevo archivo".
    Inserte la descripción de la imagen aquí

4. Extraiga el código remoto más reciente, incluido el archivo de LICENCIA.
5. Verifique el archivo podspec y ejecútelo pod lib lint RCUtility.podspec --allow-warnings(si es "pod spec lint RCUtility.podspec --allow-warnings", aparecerá la etiqueta ERROR), si aparece "RCUtility pasó la validación", la verificación se aprobó y la etiqueta aparecerá se agregará a continuación.
6. Agregar etiqueta: ejecute para git tag 0.0.1agregar una etiqueta ("git tag" puede mostrar todas las etiquetas locales, "git ls-remote --tags origin" puede mostrar todas las etiquetas remotas), ejecute "git push --tags" para insertar etiquetas a remoto.
7. Verifique el archivo podspec nuevamente y ejecútelo pod spec lint RCUtility.podspec --allow-warnings. Si aparece "RCUtility.podspec pasó la validación.", La verificación se pasa y no se produce ningún error de etiqueta.

8. Si no ha registrado CocoaPods antes de publicar en CocoaPods, regístrese primero :

  • 8.1. Primero verifique si se ha registrado, ejecútelo pod trunk mey devuelva la información de registro para que ya se haya registrado; devuelva "[!] El token de autenticación no es válido o no está verificado. Verifíquelo con el correo electrónico que se envió o registre una nueva sesión. "Necesita registrarse de nuevo; si regresa" [!] Hubo un error al obtener su información del tronco: la ejecución expiró ", se ha registrado correctamente. Vuelva a intentarlo hasta que aparezca la información de registro.
  • 8.2. Después de registrarse en CocoaPods pod trunk register [email protected] "crx" --verbose, aparece "[!] Verifique la sesión haciendo clic en el enlace en el correo electrónico de verificación que se envió a [email protected]", luego revise el correo electrónico y haga clic en el enlace para verificar.

9. Publicar en CocoaPods :

  • 9.1. Ejecución pod trunk push RCUtility.podspec --allow-warnings, se produce un error: la
    Inserte la descripción de la imagen aquí
    versión cocoapods es 1.7.2, la versión cocoapods-trunk es 1.5.0, ejecute sudo gem uninstall cocoapods-trunkdesinstalar cocoapods-trunk versión 1.5.0 , y luego ejecute sudo gem install cocoapods-trunk -v 1.3.1instalar cocoapods-trunk versión 1.3.1 (parece que hay es un aviso de cocoapods 1.7.2 al desinstalar Need cocoapods-trunk> = 1.3.1, <2.0) ( rubygems.org puede comprobar qué versiones de cocoapods-trunk tienen, la última versión es 1.5.0 y la última versión de cocoapods es 1.10.1).
  • 9.2. Vuelva a ejecutar pod trunk push RCUtility.podspec --allow-warnings, cuando aparezca "Updating spec repo'master '", espere 1 hora y finalmente aparezca de la siguiente manera:
    Inserte la descripción de la imagen aquí
  • 9.3. El pod search RCUtilityerror de ejecución "[!] No se puede encontrar un pod con nombre, autor, resumen o descripción que coincida con 'RCUtility'", primero elimine el archivo search_index.json en el directorio "~ / Library / Caches / CocoaPods /", y luego Vuelva a ejecutar la búsqueda, y aparecerá "Creando índice de búsqueda para spec repo'master '..." Después de 5 minutos, aparecerán los resultados de la búsqueda y se volverá a generar search_index.json.

10. Confirme el archivo RCUtility.podspec en el repositorio de git.

Marco agregar prueba unitaria

1. Haga clic en "+" en la esquina inferior izquierda de TARGETS, seleccione iOS-> Prueba-> Paquete de prueba unitaria en la ventana emergente, complete "Nombre de biblioteca + Pruebas" para Nombre del producto, seleccione la biblioteca RCUtility (no RCUtilityDemo ) para que se pruebe Target, después de agregar, TARGETS tendrá One RCUtilityTests más, habrá un directorio RCUtilityTests más en la ventana de navegación izquierda.
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí
2. "#import" RCFirst.h "" importe una clase en Framework, escriba un método que comience con prueba, escriba el código de prueba en el método, haga clic en el diamante a la izquierda del método de prueba para ejecutar el caso de prueba y el diamante se volverá verde cuando pase la prueba.
2.1. Cuando aparezca la advertencia "Falta el submódulo'RCUtility.RCFirst '" en "#import" RCFirst.h "", agregue "#import" RCFirst.h "" al archivo RCUtility.h para eliminar la advertencia (sin esta oración No afectará a otros proyectos el uso de esta biblioteca a través de cocoapods), y luego hay una advertencia "Incluido entre comillas dobles" RCFirst.h "en el encabezado del marco, en su lugar se espera que esté entre corchetes", estableciendo TARGETS -> "RCUtility" - > "Configuración de compilación" -> "Incluir entre comillas en el encabezado del marco" es NO para eliminar la advertencia, o cambiar a "#import <RCUtility / RCFirst.h>".

3. Puede usar el proyecto principal para probar el Framework, o puede usar la prueba unitaria.

CocoaPods se da cuenta de la componentización

El propósito de la componentización es compartir el mismo módulo para diferentes productos y evitar el desarrollo repetido del mismo módulo.

1. CD a cualquier directorio como TempProjects, ejecute la pod lib create RCAudioEnginebiblioteca de creación y se creará un directorio RCAudioEngine en el directorio TempProjects, que contiene el directorio de ejemplo (aunque la aplicación de demostración para incluir está establecida en No, se crea un proyecto de prueba) , LICENSE, RCAudioEngine Directory (que contiene los archivos de clase de esta biblioteca), RCAudioEngine.podspec, README.md y git se han inicializado y enviado. Algunos archivos en el directorio TempProjects-> RCAudioEngine deben eliminarse, algunos deben mantenerse, algunos deben modificarse y algunas ubicaciones deben moverse, por lo que no hay una ejecución directa de pod lib create en el directorio de CBD relevante para crear una biblioteca.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
2. Cree un directorio para almacenar la biblioteca de componentes local en el directorio CBD y asígnele el nombre LocalPods.
3. Cree un directorio de biblioteca RCAudioEngine en el directorio LocalPods y agregue archivos relacionados:
Inserte la descripción de la imagen aquí

  • 3.1 Mueva la LICENCIA y REDEME.md del directorio xx / TempProjects / RCAudioEngine hasta aquí (es decir, el directorio xx / LocalPods / RCAudioEngine, y los archivos y directorios de creación subsiguientes se colocan en este directorio).
  • 3.2 Cree un directorio de Clases y coloque cualquier archivo como un par de .hy .m en este directorio (estos archivos se pueden eliminar más adelante).
  • 3.3 Mueva el archivo RCAudioEngine.podspec bajo el directorio xx / TempProjects / RCAudioEngine hasta aquí y
    modifíquelo de la siguiente manera: Modifique principalmente s.source_files al directorio donde se encuentran los archivos de la biblioteca, mantenga los demás valores predeterminados y elimine los comentarios.
Pod::Spec.new do |s|
  s.name             = 'RCAudioEngine'
  s.version          = '0.1.0'
  s.summary          = 'A short description of RCAudioEngine.'
  s.homepage         = 'https://github.com/rccrx/RCAudioEngine'
  s.license          = {
    
     :type => 'MIT', :file => 'LICENSE' }
  s.author           = {
    
     'rccrx' => '[email protected]' }
  s.source           = {
    
     :git => 'https://github.com/rccrx/RCAudioEngine.git', :tag => s.version.to_s }
  s.ios.deployment_target = '9.0'
  s.source_files = 'Classes/**/*'
end
  • 3.4. Modifique el Podfile del CBD y agregue pod 'RCAudioEngine', :path => './LocalPods/RCAudioEngine'(la ruta es la ubicación del directorio RCAudioEngine de la biblioteca de componentes local relativa al Podfile del CBD). Ejecute el directorio CBD de cd y pod installaparecerá un directorio de Development Pods debajo de Pods proyecto en el panel de navegación izquierdo, que contiene la biblioteca de componentes local.
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí
  • 3.5. Si necesita un directorio de recursos (no es necesario crearlo), entonces:
    [Si usa una biblioteca estática (es decir, el Podfile del CBD no tiene use_frameworks!), Se recomienda usar "s. Resource_bundles = xx "en lugar de" s.resources = xx ", porque las imágenes de los recursos pueden tener el mismo nombre que las imágenes del proyecto principal.
    • 3.5.1 Utilice resource_bundles :
      • 3.5.1.1 Cree un directorio Activos en el directorio LocalPods / RCAudioEngine y coloque cualquier archivo como d3.png en él.
      • 3.5.1.2. Modifique RCAudioEngine.podspec para agregar s.resource_bundles = { 'RCAudioEngine' => ['Assets/**/*'] }, ejecutar la instalación de pod y generar automáticamente el directorio de Recursos en Pods de desarrollo-> RCAudioEngine, y hay archivos de recursos en el directorio.
      • 3.5.1.3. No use "use_frameworks!", CBD.app en CBD-> Products después de la compilación contendrá el archivo RCAudioEngine.bundle (Assets.car solo contiene el archivo agregado al proyecto principal CBD-> CBD-> Assets .xcassets La imagen en) (y el archivo RCAudioEngine.bundle también se genera en el proyecto Pods-> Productos), por lo que el uso del archivo en RCAudioEngine.bundle es:
        Inserte la descripción de la imagen aquí
NSBundle *aeBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"RCAudioEngine" ofType:@"bundle"]];
UIImage *image = [UIImage imageWithContentsOfFile:[aeBundle pathForResource:@"d3.png" ofType:nil]];

El uso de "[UIImage imageNamed: @" d3.png "]" no puede obtener la imagen, no importa si está en la biblioteca RCAudioEngine o en el proyecto principal CBD, no se puede mostrar.

  • 3.5.1.4. No cree archivos de catálogo de activos en RCAudioEngine / Assets : si crea un RCAudioEngineAssets.xcassets en Development Pods-> RCAudioEngine-> Resources (la ruta de almacenamiento de archivos es Assets en RCAudioEngine, y Targets marca RCAudioEngine-RCAudioEngine, no cuenta. Marcar o marcar otro también se convertirá automáticamente en RCAudioEngine-RCAudioEngine después de la instalación del pod, y se generará un Assets.car en el proyecto Pods-> Products-> RCAudioEngine.bundle, pero no en el proyecto principal CBD-> Productos -> CBD.app-> RCAudioEngine.bundle, y CBD-> Products-> CBD.app-> Assets.car no contiene las imágenes en RCAudioEngineAssets.xcassets ( abierto con AssetCatalogTinkerer ), por lo que Asset Catalog no se utiliza.

    • 3.5.2, utilizar recursos :
      • 3.5.2.1. Haga clic con el botón derecho en Pods de desarrollo-> RCAudioEngine y seleccione Nuevo grupo para crear un directorio de recursos. Este directorio está al mismo nivel que el directorio de clases. Después de este directorio, puede colocar archivos de recursos como xx.xcassets. Por ejemplo, seleccione este directorio y presione Comando + N para crear un nuevo archivo. En la ventana emergente, seleccione iOS-> Recurso-> Catálogo de activos, la ruta de almacenamiento del archivo es Recursos en RCAudioEngine, Grupo es Recursos y Destinos sin marcar Después de confirmar, se generará un archivo RCAudioEngine.xcassets en el directorio de Recursos.
        Inserte la descripción de la imagen aquí
      • 3.5.2.2. Modifique RCAudioEngine.podspec para agregar s.resources = 'Resources/**/*', de lo contrario, este directorio no se mostrará en Development Pods-> RCAudioEngine después de la instalación del pod. (O cree un directorio Res en el Finder y coloque una imagen en él, luego s.resources = 'Res / ** / *', al ejecutar la instalación del pod se generará un directorio de Recursos en Development Pods-> RCAudioEngine, el nombre no es Res .)
      • 3.5.2.3. La imagen agregada al directorio Res se puede usar directamente en el proyecto principal de CBD y la biblioteca RCAudioEngine a través de "[UIImage imageNamed: @" d3.png "]", porque esta imagen está directamente en CBD bajo CBD-> Productos En el .app, no hay RCAudioEngine.bundle.
      • 3.5.2.4. Para las imágenes agregadas a RCAudioEngine.xcassets, aparece el error "Varios comandos producen'xx / CBD.app / Assets.car '" durante la compilación. Tal vez se refiera a Assets.xcassets y Pods-> Desarrollo en la proyecto CBD. RCAudioEngine.xcassets en Pods-> RCAudioEngine genera un archivo llamado Assets.car. Este problema no está resuelto por el momento, use resource_bundles.
        Inserte la descripción de la imagen aquí
  • 3.6.Cree dos directorios Público y Modelo en el directorio RCAudioEngine / Classes en el Finder (porque al hacer clic con el botón derecho en Nuevo grupo se generará un nuevo directorio en el mismo nivel de Clases, por lo tanto, cree manualmente un subdirectorio en Clases en el Finder), en estos dos Coloque cualquier archivo en el directorio y ejecute la instalación de pod, estos dos directorios aparecerán en Development Pods-> RCAudioEngine (si no hay archivos en el directorio, no aparecerán).
    Inserte la descripción de la imagen aquí

    • 3.6.1. Eliminar ViewController.h, ViewController.m, T1.h, T2.h (clic derecho -> Eliminar-> Mover a la papelera), crear RCFirstModel.hm en Model, crear RCFirstPublic.hm en Public y hacer una ventana emergente una ventana Para Objetivos, marque RCAudioEngine.
    • 3.6.2. Utilice estas dos clases "#import" RCFirstPublic.h "#import" RCFirstModel.h "" en el proyecto principal de CBD, e informe el error "'RCFirstPublic.h' file not found". Simplemente ejecute "pod install "No más errores (se requiere la instalación de pod cada vez que se agrega o elimina un archivo).
    • 3.6.3. Si solo desea exponer los archivos en el directorio público al proyecto principal, modifique RCAudioEngine.podspec y agregue s.public_header_files = 'Classes/Public/**/*.h'para que el proyecto principal "#import" RCFirstPublic.h "" no informe de un error, "#import "RCFirstModel.h" "Informar de un error.
    • 3.6.4. Agregue el método aString a RCFirstPublic, compile y pase, el error "+ [RCFirstPublic aString]: selector no reconocido enviado a la clase 0x104e5e298" aparece al ejecutar, Shift + Command + K limpiar, y luego ejecutar nuevamente.
    • 3.6.5 Después de modificar los archivos en la biblioteca RCAudioEngine, como RCFirstPublic, se debe ejecutar la instalación del pod y habrá un mensaje de finalización cuando se use en el proyecto principal.
  • 3.7 、prefix_header_file

    • 3.7.1. De forma predeterminada, el archivo RCAudioEngine-prefix.pch se genera automáticamente en Development Pods-> RCAudioEngine-> Support Files. Si no desea generar este archivo, modifique RCAudioEngine.podspec y agréguelo s.prefix_header_file = false.
    • 3.7.2 Pasos para agregar el archivo pch (pero no recomendado, porque Pod no debería contaminar el encabezado del prefijo de otras bibliotecas o proyectos de usuario en cocoapods.org ): Seleccione Development Pods-> RCAudioEngine-> Pod para crear un nuevo archivo "iOS- > Otro -> Archivo PCH ", nombre RCAudioEnginePrefix, seleccione Clases para la ubicación de almacenamiento, seleccione Pod para Grupo, desmarque Objetivos, modifique RCAudioEngine.podspec para s.prefix_header_file = 'Classes/RCAudioEnginePrefix.pch', después de ejecutar la instalación del pod, este archivo aparece en los Pods de desarrollo-> RCAudioEngine en lugar del Pod a continuación it, El contenido del archivo se empalma automáticamente al final del archivo RCAudioEngine-prefix.pch original.
  • 3.8. Agregue el código de la biblioteca de componentes local RCAudioEngine al git del proyecto principal CBD :

    • 3.8.1. Debido a que algunos archivos se agregaron y eliminaron durante la prueba anterior, el almacén de CBD de Sourcetree también muestra estos archivos. Después de ejecutar "git status", estos archivos se muestran como archivos nuevos en "Cambios a confirmar:". Cambios no preparado para confirmación: "se muestra como eliminado, ejecute" git restore - archivos preparados como LocalPods / RCAudioEngine / Resources / RCAudioEngine.xcassets "para que Sourcetree no muestre estos archivos.
    • 3.8.2 Verifique todos los archivos en el almacén de CBD de Sourcetree (especialmente todos los archivos en el directorio LocalPods) y confirme.
      Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/rccrx/article/details/113792485
Recomendado
Clasificación