• watchOS 7 Años Primer release: 3 de Diciembre De 2011 Lenguajes • Swift • Objective-C Distribución • Código fuente • .xcframework Swift Package Manager 5
5.0 Swift 5.0 Evolución 6 Solo compatible con Server Side Swift Soporte para ramas en dependencias (SE-0150) Soporte para C/C++ (SE-0181) Soporte para dependencias locales (SE-021) Soporte para plataformas Apple (SE-0236)
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile target 'Networking' do project 'Networking/Networking.xcodeproj' target 'NetworkingTests' do inherit! :search_paths test_pods end end target 'Search' do project 'Search/Search.xcodeproj' pod 'SDWebImageSwiftUI' target 'SearchTests' do inherit! :search_paths snapshot_test_pods end end target 'AudioDetail' do project 'AudioDetail/AudioDetail.xcodeproj' pod 'SDWebImageSwiftUI' target 'AudioDetailTests' do inherit! :search_paths snapshot_test_pods end end
Pods Products Targets Support Files Podfile Podfile target 'Networking' do project 'Networking/Networking.xcodeproj' target 'NetworkingTests' do inherit! :search_paths test_pods end end target 'Search' do project 'Search/Search.xcodeproj' pod 'SDWebImageSwiftUI' target 'SearchTests' do inherit! :search_paths snapshot_test_pods end end target 'AudioDetail' do project 'AudioDetail/AudioDetail.xcodeproj' pod 'SDWebImageSwiftUI' target 'AudioDetailTests' do inherit! :search_paths snapshot_test_pods end end
Pods Products Targets Support Files Podfile Podfile target 'Networking' do project 'Networking/Networking.xcodeproj' target 'NetworkingTests' do inherit! :search_paths test_pods end end target 'Search' do project 'Search/Search.xcodeproj' pod 'SDWebImageSwiftUI' target 'SearchTests' do inherit! :search_paths snapshot_test_pods end end target 'AudioDetail' do project 'AudioDetail/AudioDetail.xcodeproj' pod 'SDWebImageSwiftUI' target 'AudioDetailTests' do inherit! :search_paths snapshot_test_pods end end
Pods Products Targets Support Files Podfile Podfile target 'Networking' do project 'Networking/Networking.xcodeproj' target 'NetworkingTests' do inherit! :search_paths test_pods end end target 'Search' do project 'Search/Search.xcodeproj' pod 'SDWebImageSwiftUI' target 'SearchTests' do inherit! :search_paths snapshot_test_pods end end target 'AudioDetail' do project 'AudioDetail/AudioDetail.xcodeproj' pod 'SDWebImageSwiftUI' target 'AudioDetailTests' do inherit! :search_paths snapshot_test_pods end end
README Package Sources Tests objc[92153]: Class _TtC17SDWebImageSwiftUI24AnimatedImageCoordinator is implemented in both /Users/ bastian.veliz.vega/DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug- iphonesimulator/PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b009818) and /Users/bastian.veliz.vega/ Library/Developer/CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/ 845A79BA-B817-4B40-A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca8d20). One of the two will be used. Which one is undefined.
README Package Sources Tests objc[92153]: Class _TtC17SDWebImageSwiftUI24AnimatedImageCoordinator is implemented in both /Users/ bastian.veliz.vega/DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug- iphonesimulator/PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b009818) and /Users/bastian.veliz.vega/ Library/Developer/CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/ 845A79BA-B817-4B40-A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca8d20). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI18AnimatedImageModel is implemented in both /Users/bastian.veliz.vega/DEV/ personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug-iphonesimulator/PackageFrameworks/ VideoDetail.framework/VideoDetail (0x10b00b6a8) and /Users/bastian.veliz.vega/Library/Developer/CoreSimulator/ Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/845A79BA-B817-4B40- A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca9bc0). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI20AnimatedLoadingModel is implemented in both /Users/bastian.veliz.vega/ DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug-iphonesimulator/ PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b00b798) and /Users/bastian.veliz.vega/Library/Developer/ CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/845A79BA-B817-4B40- A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca9cb0). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI20AnimatedImageHandler is implemented in both /Users/bastian.veliz.vega/ DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug-iphonesimulator/ PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b00b8d8) and /Users/bastian.veliz.vega/Library/Developer/ CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/845A79BA-B817-4B40- A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca9df0). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI19AnimatedImageLayout is implemented in both /Users/bastian.veliz.vega/ DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug-iphonesimulator/ PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b00b9a8) and /Users/bastian.veliz.vega/Library/Developer/ CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/845A79BA-B817-4B40- A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca9ec0). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI26AnimatedImageConfiguration is implemented in both /Users/ bastian.veliz.vega/DEV/personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug- iphonesimulator/PackageFrameworks/VideoDetail.framework/VideoDetail (0x10b00ba70) and /Users/bastian.veliz.vega/ Library/Developer/CoreSimulator/Devices/C38246D5-1046-4E43-B0AC-CE7A9E765D47/data/Containers/Bundle/Application/ 845A79BA-B817-4B40-A1E5-7FEDF19103A0/ItunesExample.app/Frameworks/SDWebImageSwiftUI.framework/SDWebImageSwiftUI (0x10aca9f88). One of the two will be used. Which one is undefined. objc[92153]: Class _TtC17SDWebImageSwiftUI12ImageManager is implemented in both /Users/bastian.veliz.vega/DEV/ personal/multidependency-example/DerivedData/ItunesExample/Build/Products/Debug-iphonesimulator/PackageFrameworks/ VideoDetail.framework/VideoDetail (0x10b00bc88) and /Users/bastian.veliz.vega/Library/Developer/CoreSimulator/
aplicación. • Proyecto no compila al querer correr las pruebas. • Dependencias de CocoaPods no “conversan” necesariamente con dependencias de SPM. • La estructura del proyecto debe ser capaz de que ambas herramientas (CocoaPods y SPM) puedan coexistir. ¿O los problemas? 85
XCFrameworks. • Crear un Swift Package que utilice los mismos archivos XCFramework de CocoaPods. • Finalizar la implementación de VideoDetail. Paso a Paso 98
to CocoaPods that allows to prebuild pods into frameworks which can then be included into a project’s repo. Instead of committing pod’s source code you add its compiled counterpart. While there is a size penalty in doing so compilation times will decrease signi fi cantly because pod's source fi les no longer need to be recompiled very often and there's also a lot less for SourceKit to index. Additionally frameworks contain all architecture so they’re ready to be used both on any device and simulator. Depending on the size of the project and number of pods this can translate in a signi fi cant reduction of compilation times (for a large project we designed this tool for we saw a 50% faster compile times, but YMMV).
to CocoaPods that allows to prebuild pods into frameworks which can then be included into a project’s repo. Instead of committing pod’s source code you add its compiled counterpart. While there is a size penalty in doing so compilation times will decrease signi fi cantly because pod's source fi les no longer need to be recompiled very often and there's also a lot less for SourceKit to index. Additionally frameworks contain all architecture so they’re ready to be used both on any device and simulator. Depending on the size of the project and number of pods this can translate in a signi fi cant reduction of compilation times (for a large project we designed this tool for we saw a 50% faster compile times, but YMMV).
to CocoaPods that allows to prebuild pods into frameworks which can then be included into a project’s repo. Instead of committing pod’s source code you add its compiled counterpart. While there is a size penalty in doing so compilation times will decrease signi fi cantly because pod's source fi les no longer need to be recompiled very often and there's also a lot less for SourceKit to index. Additionally frameworks contain all architecture so they’re ready to be used both on any device and simulator. Depending on the size of the project and number of pods this can translate in a signi fi cant reduction of compilation times (for a large project we designed this tool for we saw a 50% faster compile times, but YMMV).
to CocoaPods that allows to prebuild pods into frameworks which can then be included into a project’s repo. Instead of committing pod’s source code you add its compiled counterpart. While there is a size penalty in doing so compilation times will decrease signi fi cantly because pod's source fi les no longer need to be recompiled very often and there's also a lot less for SourceKit to index. Additionally frameworks contain all architecture so they’re ready to be used both on any device and simulator. Depending on the size of the project and number of pods this can translate in a signi fi cant reduction of compilation times (for a large project we designed this tool for we saw a 50% faster compile times, but YMMV).
dependencies, 41 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. . . . $ Gemfile # frozen_string_literal: true source "https://rubygems.org" gem "cocoapods", "1.11.3" gem "pod-builder", "4.4.5" $ bundle exec pod_builder init Bundle complete! 2 Gemfile dependencies, 41 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. . . .
.gitignore PodBuilder.json Podfile Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project ‘../ItunesExample.xcodeproj’ pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end pre_install do |installer| raise "\n🚨 Do not launch 'pod install' manually, use `pod_builder` instead!\n" if !File.exist?('pod_builder.lock') end
def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project ‘../ItunesExample.xcodeproj’ pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end pre_install do |installer| raise "\n🚨 Do not launch 'pod install' manually, use `pod_builder` instead!\n" if !File.exist?('pod_builder.lock') end Podfile PodBuilder .pod_builder .gitattributes .gitignore PodBuilder.json
def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project ‘../ItunesExample.xcodeproj’ pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end pre_install do |installer| raise "\n🚨 Do not launch 'pod install' manually, use `pod_builder` instead!\n" if !File.exist?('pod_builder.lock') end Podfile PodBuilder .pod_builder .gitattributes .gitignore PodBuilder.json
Pods Products Targets Support Files Podfile Podfile (old) platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod "Quick" pod "Nimble" end def snapshot_test_pods test_pods pod "Nimble-Snapshots" end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImageSwiftUI' target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile (new) # Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder) # Any change to this file should be done on PodBuilder/Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod 'Quick', :path => 'PodBuilder/Prebuilt/Quick' # pb<Quick> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble> end def snapshot_test_pods test_pods pod 'iOSSnapshotTestCase', :path => 'PodBuilder/Prebuilt/iOSSnapshotTestCase' # pb<Nimble-Snapshots> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble-Snapshots> pod 'Nimble-Snapshots', :path => 'PodBuilder/Prebuilt/Nimble-Snapshots' # pb<Nimble-Snapshots> end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImage', :path => 'PodBuilder/Prebuilt/SDWebImage' # pb<SDWebImageSwiftUI> pod 'SDWebImageSwiftUI', :path => 'PodBuilder/Prebuilt/SDWebImageSwiftUI' # pb<SDWebImageSwiftUI> target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile (new) # Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder) # Any change to this file should be done on PodBuilder/Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod 'Quick', :path => 'PodBuilder/Prebuilt/Quick' # pb<Quick> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble> end def snapshot_test_pods test_pods pod 'iOSSnapshotTestCase', :path => 'PodBuilder/Prebuilt/iOSSnapshotTestCase' # pb<Nimble-Snapshots> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble-Snapshots> pod 'Nimble-Snapshots', :path => 'PodBuilder/Prebuilt/Nimble-Snapshots' # pb<Nimble-Snapshots> end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImage', :path => 'PodBuilder/Prebuilt/SDWebImage' # pb<SDWebImageSwiftUI> pod 'SDWebImageSwiftUI', :path => 'PodBuilder/Prebuilt/SDWebImageSwiftUI' # pb<SDWebImageSwiftUI> target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile (new) # Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder) # Any change to this file should be done on PodBuilder/Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod 'Quick', :path => 'PodBuilder/Prebuilt/Quick' # pb<Quick> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble> end def snapshot_test_pods test_pods pod 'iOSSnapshotTestCase', :path => 'PodBuilder/Prebuilt/iOSSnapshotTestCase' # pb<Nimble-Snapshots> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble-Snapshots> pod 'Nimble-Snapshots', :path => 'PodBuilder/Prebuilt/Nimble-Snapshots' # pb<Nimble-Snapshots> end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImage', :path => 'PodBuilder/Prebuilt/SDWebImage' # pb<SDWebImageSwiftUI> pod 'SDWebImageSwiftUI', :path => 'PodBuilder/Prebuilt/SDWebImageSwiftUI' # pb<SDWebImageSwiftUI> target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
Pods Products Targets Support Files Podfile Podfile (new) # Autogenerated by PodBuilder (https://github.com/Subito-it/PodBuilder) # Any change to this file should be done on PodBuilder/Podfile platform :ios, '15.0' use_frameworks! workspace 'ItunesExample.xcworkspace' def test_pods pod 'Quick', :path => 'PodBuilder/Prebuilt/Quick' # pb<Quick> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble> end def snapshot_test_pods test_pods pod 'iOSSnapshotTestCase', :path => 'PodBuilder/Prebuilt/iOSSnapshotTestCase' # pb<Nimble-Snapshots> pod 'Nimble', :path => 'PodBuilder/Prebuilt/Nimble' # pb<Nimble-Snapshots> pod 'Nimble-Snapshots', :path => 'PodBuilder/Prebuilt/Nimble-Snapshots' # pb<Nimble-Snapshots> end target 'ItunesExample' do project 'ItunesExample.xcodeproj' pod 'SDWebImage', :path => 'PodBuilder/Prebuilt/SDWebImage' # pb<SDWebImageSwiftUI> pod 'SDWebImageSwiftUI', :path => 'PodBuilder/Prebuilt/SDWebImageSwiftUI' # pb<SDWebImageSwiftUI> target 'ItunesExampleTests' do inherit! :search_paths snapshot_test_pods end target 'ItunesExampleUITests' do # Pods for testing end end
de CocoaPods y SPM no es trivial. • Usar XCFrameworks para todo tiene beneficios pero también quita visibilidad sobre el código fuente de las bibliotecas. • Integrar PodBuilder no siempre es sencillo. A veces se debe iterar mucho con la herramienta. 146