tab style guidelines buttons bar apple app ios xcode cocoapods

ios - style - La clase se implementa en ambos, se utilizará uno de los dos. Cual es indefinido



tab bar (3)

Actualizado: escribo un artículo de blog para mi solución: https://medium.com/@GalvinLi/tinysolution-resolve-the-restrictions-of-enum-d854ba49886d

Y un proyecto de demostración: https://github.com/bestwnh/TinySolution

Obtuve la idea de la solución de Internet pero no puedo encontrar una solución que funcione, así que hago una solución por mi cuenta. Tal vez el código sea un poco largo, pero funciona. Espero que pueda ayudar a alguien.

El auto_process_target(,,) es la función clave, simplemente cámbielo para que se ajuste a su proyecto y todo debería funcionar bien. (Debido a que uso un marco para el destino de múltiples aplicaciones, así que hago que el parámetro de destino de la aplicación sea una matriz)

post_install do |installer| # you should change the sample auto_process_target method call to fit your project # sample for the question auto_process_target([''MyFrameworkExampleApp''], ''MyFramework'', installer) # sample for the multi app use on same framework auto_process_target([''exampleiOSApp'', ''exampleMacApp''], ''exampleFramework'', installer) end # the below code no need to modify def auto_process_target(app_target_names, embedded_target_name, installer) words = find_words_at_embedded_target(''Pods-'' + embedded_target_name, installer) handle_app_targets(app_target_names.map{ |str| ''Pods-'' + str }, words, installer) end def find_line_with_start(str, start) str.each_line do |line| if line.start_with?(start) return line end end return nil end def remove_words(str, words) new_str = str words.each do |word| new_str = new_str.sub(word, '''') end return new_str end def find_words_at_embedded_target(target_name, installer) target = installer.pods_project.targets.find { |target| target.name == target_name } target.build_configurations.each do |config| xcconfig_path = config.base_configuration_reference.real_path xcconfig = File.read(xcconfig_path) old_line = find_line_with_start(xcconfig, "OTHER_LDFLAGS") if old_line == nil next end words = old_line.split('' '').select{ |str| str.start_with?("-l") }.map{ |str| '' '' + str } return words end end def handle_app_targets(names, words, installer) installer.pods_project.targets.each do |target| if names.index(target.name) == nil next end puts "Updating #{target.name} OTHER_LDFLAGS" target.build_configurations.each do |config| xcconfig_path = config.base_configuration_reference.real_path xcconfig = File.read(xcconfig_path) old_line = find_line_with_start(xcconfig, "OTHER_LDFLAGS") if old_line == nil next end new_line = remove_words(old_line, words) new_xcconfig = xcconfig.sub(old_line, new_line) File.open(xcconfig_path, "w") { |file| file << new_xcconfig } end end end

Si todo funciona. Verá la Update xxxx OTHER_LDFLAGS cuando pod install o pod update . Entonces la advertencia se fue.

Tengo un problema con las dependencias incluidas en Cocoapods.

Tengo un proyecto de Framework (objetivo MyFramework), que también tiene un destino de aplicación (MyFrameworkExampleApp). Cuando intento ejecutar la aplicación, obtengo una consola llena de errores, como los siguientes:

Class PodsDummy_AFNetworking se implementa tanto en /private/var/containers/Bundle/Application/AD85D7EC-2652-4019-94FB-C799D0FBA69B/MyFramework en la que se analiza la información de la persona en general. /AD85D7EC-2652-4019-94FB-C799D0FBA69B/MyFrameworkExampleApp.app/MyFrameworkExampleApp (0x10107c558). Uno de los dos será usado. Cuál es indefinido.

El problema es que los errores provienen de las bibliotecas incluidas solo en el destino MyFramework

Aquí están los contenidos de mi podfile:

# Specify platform. platform :ios, ''9.0'' # Let''s ignore all warnings from all pods inhibit_all_warnings! target ''MyFramework’ do # ReactiveCocoa for easier binding between UI and data models. pod ''ReactiveCocoa'', ''< 3.0'' # ReactiveViewModel for easier handling of active/inactive view models. pod ''ReactiveViewModel'', ''0.3'' # An Objective-C extension with some nice helpers including @weakify/@strongify. pod ''libextobjc'', ''~> 0.4.1'' # AFNetworking Security stuff pod ''AFNetworking/Security'', ''~> 2.5.4'' # KZPropertyMapper to easily map JSON dicts to properties pod "KZPropertyMapper" # Simple wrapper for KeyChain pod ''UICKeyChainStore'', ''~> 2.0.6'' # Animated gifs pod ''FLAnimatedImage'', ''~> 1.0'' # Firebase push notifications pod ''Firebase/Core'' pod ''Firebase/Messaging'' # Easy image downloading with cache. pod ''SDWebImage'', ''~> 3.7.2'' # Activity indicator for RBSlider pod ''DGActivityIndicatorView'' end target ''MyFrameworkExampleApp'' do # Progress indicator pod ''MBProgressHUD'', ''~> 1.0.0'' # Color picker pod ''iOS-Color-Picker'' # Hockey SDK pod ''HockeySDK'', ''~> 5.0.0'' end

Como puede ver, el objetivo de la aplicación no hereda ningún pod, ni tengo ningún pod global. ¿Cuál podría ser la razón de esto?


No sé la razón, pero si abres el archivo Pods- [AppName] .debug.xcconfig de la aplicación que crea cocoapods, encontrarás OTHER_LDFLAGS y verás los enlaces a los mismos frameworks que vinculas en tu framework. Por lo tanto, si elimina -framework [Duplicated framework], la advertencia desaparecerá.

Parece ser un error cocoápodos


También encontré otro script que alguien escribió para corregir el error automáticamente. Es simplemente hacer lo mismo que respondí arriba. Agrégalo a tu Podfile:

post_install do |installer| sharedLibrary = installer.aggregate_targets.find { |aggregate_target| aggregate_target.name == ''Pods-[MY_FRAMEWORK_TARGET]'' } installer.aggregate_targets.each do |aggregate_target| if aggregate_target.name == ''Pods-[MY_APP_TARGET]'' aggregate_target.xcconfigs.each do |config_name, config_file| sharedLibraryPodTargets = sharedLibrary.pod_targets aggregate_target.pod_targets.select { |pod_target| sharedLibraryPodTargets.include?(pod_target) }.each do |pod_target| pod_target.specs.each do |spec| frameworkPaths = unless spec.attributes_hash[''ios''].nil? then spec.attributes_hash[''ios''][''vendored_frameworks''] else spec.attributes_hash[''vendored_frameworks''] end || Set.new frameworkNames = Array(frameworkPaths).map(&:to_s).map do |filename| extension = File.extname filename File.basename filename, extension end end frameworkNames.each do |name| if name != ''[DUPLICATED_FRAMEWORK_1]'' && name != ''[DUPLICATED_FRAMEWORK_2]'' raise("Script is trying to remove unwanted flags: #{name}. Check it out!") end puts "Removing #{name} from OTHER_LDFLAGS" config_file.frameworks.delete(name) end end end xcconfig_path = aggregate_target.xcconfig_path(config_name) config_file.save_as(xcconfig_path) end end end