ios - mac - podfile
Usando CocoaPods con mĂșltiples proyectos (5)
Tengo un espacio de trabajo que contiene:
- myiPhone.xcodeproj
- sharedStuff / sharedStuff.xcodeproj
sharedStuff.xcodeproj crea una biblioteca estática que es una dependencia de myiPhone.xcodeproj (por simplicidad, suponga que cada proyecto tiene un solo objetivo).
Ahora quiero agregar una biblioteca a través de CocoaPods que debería estar disponible para ambos proyectos.
Mi archivo Pods se ve así:
workspace ''myWorkspace.xcworkspace''
platform :ios
target :myiPhone do
xcodeproj ''myiPhone.xcodeproj''
pod ''MBProgressHUD'', ''~> 0.6''
end
target :sharedStuff do
xcodeproj ''sharedStuff/sharedStuff.xcodeproj''
pod ''MBProgressHUD'', ''~> 0.6''
end
Cuando construyo me sale estos errores:
diff: /../Podfile.lock: No existe tal archivo o directorio. diff: /Manifest.lock: No existe tal error de archivo o directorio: El sandbox no está sincronizado con el Podfile.lock. Ejecute ''pod install'' o actualice su instalación de CocoaPods.
¿Alguien tiene una pista de lo que está pasando aquí?
ACTUALIZACIÓN: Por su aspecto, la variable PODS_ROOT no se establece cuando se ejecuta la fase de compilación "Check Pods Manifest.lock".
Con la sintaxis actual se ve así
use_frameworks!
workspace ''myWorkspace''
project ''myiPhone''
project ''sharedStuff/sharedStuff''
target ''myiPhone'' do
project ''myiPhone''
pod ''MBProgressHUD'', ''~> 0.6''
end
target ''sharedStuff'' do
project ''sharedStuff/sharedStuff''
pod ''MBProgressHUD'', ''~> 0.6''
end
Esta es mi estructura de carpetas
OB
|podfile
|Project1->Project1.xcodeproj
|Project2->Project2.xcodeproj
y este es mi podfile dentro de la carpeta OB
source ''https://github.com/CocoaPods/Specs.git''
platform :ios, ''8.0''
workspace ''OB.xcworkspace''
use_frameworks!
# ignore all warnings from all pods
inhibit_all_warnings!
project ''Project1/Project1.xcodeproj''
project ''Project2/Project2.xcodeproj''
abstract_target ''OB'' do
pod ''Alamofire'', ''~> 4.0''
target ''Project1'' do
project ''Project1/Project1.xcodeproj''
end
target ''SchoolKids'' do
project ''Project2/Project2.xcodeproj''
end
end
Esto agregará Afnetworking / Alamofire a ambos proyectos. Si necesitamos un pod exclusivo para un proyecto en particular, podemos hacer esto.
target ''Project1'' do
project ''Project1/Project1.xcodeproj''
pod ''Alamofire'', ''~> 4.0''
end
Gracias a la respuesta de Rahul Vyas, finalmente tuve éxito en mi proyecto. Mi proyecto es en reactivo nativo, y uso un submódulo de git como subproyecto. Así que este es mi archivo pod:
workspace ''LuminPDFApp.xcworkspace''
# Uncomment the next line to define a global platform for your project
platform :ios, ''9.0''
use_frameworks!
inhibit_all_warnings!
project ''LuminPDFApp.xcodeproj''
project ''../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj''
abstract_target ''LuminPDFApp'' do
pod ''SwiftyDropbox''
target ''LuminPDFApp'' do
project ''LuminPDFApp.xcodeproj''
end
target ''RNFilePicker'' do
project ''../submodules/react-native-filepicker/ios/RNFilePicker.xcodeproj''
end
end
Los primeros objetivos en sus proyectos de xcode tienen una fase de compilación para realizar una diferencia en dos archivos de bloqueo. Pero parece que las configuraciones de sus proyectos de xcode no hacen referencia a las configuraciones definidas por el usuario configuradas en Pods / Pods-libPods.xcconfig.
Parece que estás intentando vincular un Pod con objetivos específicos en múltiples xcodeprojs. Si mi suposición es correcta, está utilizando el atributo de target
incorrectamente. El atributo de target
crea una nueva biblioteca estática dentro del proyecto Pods que incluye los Pods que configuró dentro de ese target
.
El destino predeterminado para los Pods xcodeproj es libPods que genera la biblioteca estática libPods.a. Esto se genera si no especifica un target
. Por lo tanto, si no le importa generar múltiples bibliotecas estáticas en los Pods xcodeproj, no se moleste en definir un objetivo y use el atributo link_with
para vincular el target
predeterminado de libPods (biblioteca estática) con los objetivos en su xcodeprojs.
Por ejemplo, el siguiente Podfile creará un destino libPods en Pods.xcodeproj que agregará fuentes de MBProgressHUD a la fase de compilación, luego agregará el archivo xcconfig que define PODS_ROOT y PODS_HEADER_SEARCH_PATH para cada uno de sus xcodeprojs. Luego vinculará esta biblioteca estática a los objetivos que especificó con link_with
y xcodeproj
workspace ''myWorkspace.xcworkspace''
platform :ios
xcodeproj ''myiPhone.xcodeproj''
link_with ''myiPhone''
xcodeproj ''sharedStuff/sharedStuff.xcodeproj''
link_with ''sharedStuff''
pod ''MBProgressHUD'', ''~> 0.6''
Tengo 2 proyectos en mi área de trabajo y la respuesta aceptada no funcionó para mí. Pero, finalmente, he logrado que Cocoapods funcione correctamente con 2 proyectos. Aquí es cómo se ve mi archivo pod:
workspace ''Projects.xcworkspace''
platform :ios, ''8.0''
use_frameworks!
# ignore all warnings from all pods
inhibit_all_warnings!
def shared_pods
# all the pods go here
# pod ''Parse'' etc.
end
xcodeproj ''Project1.xcodeproj''
xcodeproj ''Project2/Project2.xcodeproj''
target :Project1 do
xcodeproj ''Project1''
shared_pods
end
target :Project2 do
xcodeproj ''Project2/Project2.xcodeproj''
shared_pods
end