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