From f570bd9466061c791c717e97b24d0b4cdb36f6ba Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sun, 24 Dec 2023 21:28:59 +0900 Subject: [PATCH 01/19] =?UTF-8?q?[Feat]=20#230=20-=20GA=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Podfile | 5 + Runnect-iOS/Podfile.lock | 830 +++++++++++++++++- .../Runnect-iOS.xcodeproj/project.pbxproj | 72 +- .../Global/Manager/GAManager.swift | 39 + 4 files changed, 915 insertions(+), 31 deletions(-) create mode 100644 Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift diff --git a/Runnect-iOS/Podfile b/Runnect-iOS/Podfile index 861373ac..92d9d7ed 100644 --- a/Runnect-iOS/Podfile +++ b/Runnect-iOS/Podfile @@ -19,6 +19,11 @@ target 'Runnect-iOS' do pod 'KakaoSDKTalk' pod 'DropDown', :git => 'https://github.com/thingineeer/DropDown.git', :commit => '95ee36f7bd925d466033c2c169979f1c574bf3b9' pod 'CombineCocoa' + pod 'FirebaseAnalytics' + pod 'FirebaseAuth' + pod 'FirebaseFirestore' + + end # Pods for Runnect-iOS diff --git a/Runnect-iOS/Podfile.lock b/Runnect-iOS/Podfile.lock index 327732e9..19e5c15e 100644 --- a/Runnect-iOS/Podfile.lock +++ b/Runnect-iOS/Podfile.lock @@ -1,20 +1,804 @@ PODS: + - abseil/algorithm (1.20220623.0): + - abseil/algorithm/algorithm (= 1.20220623.0) + - abseil/algorithm/container (= 1.20220623.0) + - abseil/algorithm/algorithm (1.20220623.0): + - abseil/base/config + - abseil/algorithm/container (1.20220623.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/base (1.20220623.0): + - abseil/base/atomic_hook (= 1.20220623.0) + - abseil/base/base (= 1.20220623.0) + - abseil/base/base_internal (= 1.20220623.0) + - abseil/base/config (= 1.20220623.0) + - abseil/base/core_headers (= 1.20220623.0) + - abseil/base/dynamic_annotations (= 1.20220623.0) + - abseil/base/endian (= 1.20220623.0) + - abseil/base/errno_saver (= 1.20220623.0) + - abseil/base/fast_type_id (= 1.20220623.0) + - abseil/base/log_severity (= 1.20220623.0) + - abseil/base/malloc_internal (= 1.20220623.0) + - abseil/base/prefetch (= 1.20220623.0) + - abseil/base/pretty_function (= 1.20220623.0) + - abseil/base/raw_logging_internal (= 1.20220623.0) + - abseil/base/spinlock_wait (= 1.20220623.0) + - abseil/base/strerror (= 1.20220623.0) + - abseil/base/throw_delegate (= 1.20220623.0) + - abseil/base/atomic_hook (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/base (1.20220623.0): + - abseil/base/atomic_hook + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/log_severity + - abseil/base/raw_logging_internal + - abseil/base/spinlock_wait + - abseil/meta/type_traits + - abseil/base/base_internal (1.20220623.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/base/config (1.20220623.0) + - abseil/base/core_headers (1.20220623.0): + - abseil/base/config + - abseil/base/dynamic_annotations (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver (1.20220623.0): + - abseil/base/config + - abseil/base/fast_type_id (1.20220623.0): + - abseil/base/config + - abseil/base/log_severity (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal (1.20220623.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/base/prefetch (1.20220623.0): + - abseil/base/config + - abseil/base/pretty_function (1.20220623.0) + - abseil/base/raw_logging_internal (1.20220623.0): + - abseil/base/atomic_hook + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/log_severity + - abseil/base/spinlock_wait (1.20220623.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/strerror (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/errno_saver + - abseil/base/throw_delegate (1.20220623.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/cleanup/cleanup (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/cleanup/cleanup_internal + - abseil/cleanup/cleanup_internal (1.20220623.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/utility/utility + - abseil/container/common (1.20220623.0): + - abseil/meta/type_traits + - abseil/types/optional + - abseil/container/compressed_tuple (1.20220623.0): + - abseil/utility/utility + - abseil/container/container_memory (1.20220623.0): + - abseil/base/config + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/container/fixed_array (1.20220623.0): + - abseil/algorithm/algorithm + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/container/flat_hash_map (1.20220623.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_function_defaults + - abseil/container/raw_hash_map + - abseil/memory/memory + - abseil/container/flat_hash_set (1.20220623.0): + - abseil/algorithm/container + - abseil/base/core_headers + - abseil/container/container_memory + - abseil/container/hash_function_defaults + - abseil/container/raw_hash_set + - abseil/memory/memory + - abseil/container/hash_function_defaults (1.20220623.0): + - abseil/base/config + - abseil/hash/hash + - abseil/strings/cord + - abseil/strings/strings + - abseil/container/hash_policy_traits (1.20220623.0): + - abseil/meta/type_traits + - abseil/container/hashtable_debug_hooks (1.20220623.0): + - abseil/base/config + - abseil/container/hashtablez_sampler (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/stacktrace + - abseil/memory/memory + - abseil/profiling/exponential_biased + - abseil/profiling/sample_recorder + - abseil/synchronization/synchronization + - abseil/utility/utility + - abseil/container/inlined_vector (1.20220623.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/container/inlined_vector_internal + - abseil/memory/memory + - abseil/container/inlined_vector_internal (1.20220623.0): + - abseil/base/core_headers + - abseil/container/compressed_tuple + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/span + - abseil/container/layout (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/utility/utility + - abseil/container/raw_hash_map (1.20220623.0): + - abseil/base/throw_delegate + - abseil/container/container_memory + - abseil/container/raw_hash_set + - abseil/container/raw_hash_set (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/prefetch + - abseil/container/common + - abseil/container/compressed_tuple + - abseil/container/container_memory + - abseil/container/hash_policy_traits + - abseil/container/hashtable_debug_hooks + - abseil/container/hashtablez_sampler + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/utility/utility + - abseil/debugging/debugging_internal (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/errno_saver + - abseil/base/raw_logging_internal + - abseil/debugging/demangle_internal (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/stacktrace (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/debugging/debugging_internal + - abseil/debugging/symbolize (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/debugging_internal + - abseil/debugging/demangle_internal + - abseil/strings/strings + - abseil/functional/any_invocable (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/functional/bind_front (1.20220623.0): + - abseil/base/base_internal + - abseil/container/compressed_tuple + - abseil/meta/type_traits + - abseil/utility/utility + - abseil/functional/function_ref (1.20220623.0): + - abseil/base/base_internal + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/hash/city (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/hash/hash (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/container/fixed_array + - abseil/functional/function_ref + - abseil/hash/city + - abseil/hash/low_level_hash + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/types/optional + - abseil/types/variant + - abseil/utility/utility + - abseil/hash/low_level_hash (1.20220623.0): + - abseil/base/config + - abseil/base/endian + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/memory (1.20220623.0): + - abseil/memory/memory (= 1.20220623.0) + - abseil/memory/memory (1.20220623.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/meta (1.20220623.0): + - abseil/meta/type_traits (= 1.20220623.0) + - abseil/meta/type_traits (1.20220623.0): + - abseil/base/config + - abseil/numeric/bits (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/int128 (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/bits + - abseil/numeric/representation (1.20220623.0): + - abseil/base/config + - abseil/profiling/exponential_biased (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/profiling/sample_recorder (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/synchronization/synchronization + - abseil/time/time + - abseil/random/distributions (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/distribution_caller + - abseil/random/internal/fast_uniform_bits + - abseil/random/internal/fastmath + - abseil/random/internal/generate_real + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/traits + - abseil/random/internal/uniform_helper + - abseil/random/internal/wide_multiply + - abseil/strings/strings + - abseil/random/internal/distribution_caller (1.20220623.0): + - abseil/base/config + - abseil/base/fast_type_id + - abseil/utility/utility + - abseil/random/internal/fast_uniform_bits (1.20220623.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/random/internal/traits + - abseil/random/internal/fastmath (1.20220623.0): + - abseil/numeric/bits + - abseil/random/internal/generate_real (1.20220623.0): + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/random/internal/fastmath + - abseil/random/internal/traits + - abseil/random/internal/iostream_state_saver (1.20220623.0): + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/random/internal/nonsecure_base (1.20220623.0): + - abseil/base/core_headers + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/types/span + - abseil/random/internal/pcg_engine (1.20220623.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/fastmath + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/platform (1.20220623.0): + - abseil/base/config + - abseil/random/internal/pool_urbg (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/random/internal/randen + - abseil/random/internal/seed_material + - abseil/random/internal/traits + - abseil/random/seed_gen_exception + - abseil/types/span + - abseil/random/internal/randen (1.20220623.0): + - abseil/base/raw_logging_internal + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes + - abseil/random/internal/randen_slow + - abseil/random/internal/randen_engine (1.20220623.0): + - abseil/base/endian + - abseil/meta/type_traits + - abseil/random/internal/iostream_state_saver + - abseil/random/internal/randen + - abseil/random/internal/randen_hwaes (1.20220623.0): + - abseil/base/config + - abseil/random/internal/platform + - abseil/random/internal/randen_hwaes_impl + - abseil/random/internal/randen_hwaes_impl (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/random/internal/randen_slow (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/numeric/int128 + - abseil/random/internal/platform + - abseil/random/internal/salted_seed_seq (1.20220623.0): + - abseil/container/inlined_vector + - abseil/meta/type_traits + - abseil/random/internal/seed_material + - abseil/types/optional + - abseil/types/span + - abseil/random/internal/seed_material (1.20220623.0): + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/raw_logging_internal + - abseil/random/internal/fast_uniform_bits + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/random/internal/traits (1.20220623.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/uniform_helper (1.20220623.0): + - abseil/base/config + - abseil/meta/type_traits + - abseil/numeric/int128 + - abseil/random/internal/traits + - abseil/random/internal/wide_multiply (1.20220623.0): + - abseil/base/config + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/random/internal/traits + - abseil/random/random (1.20220623.0): + - abseil/random/distributions + - abseil/random/internal/nonsecure_base + - abseil/random/internal/pcg_engine + - abseil/random/internal/pool_urbg + - abseil/random/internal/randen_engine + - abseil/random/seed_sequences + - abseil/random/seed_gen_exception (1.20220623.0): + - abseil/base/config + - abseil/random/seed_sequences (1.20220623.0): + - abseil/base/config + - abseil/random/internal/pool_urbg + - abseil/random/internal/salted_seed_seq + - abseil/random/internal/seed_material + - abseil/random/seed_gen_exception + - abseil/types/span + - abseil/status/status (1.20220623.0): + - abseil/base/atomic_hook + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/base/strerror + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/functional/function_ref + - abseil/strings/cord + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/status/statusor (1.20220623.0): + - abseil/base/base + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/status/status + - abseil/strings/strings + - abseil/types/variant + - abseil/utility/utility + - abseil/strings/cord (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/container/fixed_array + - abseil/container/inlined_vector + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_info + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_scope + - abseil/strings/cordz_update_tracker + - abseil/strings/internal + - abseil/strings/str_format + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/strings/cord_internal (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/container/compressed_tuple + - abseil/container/inlined_vector + - abseil/container/layout + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/strings/strings + - abseil/types/span + - abseil/strings/cordz_functions (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/profiling/exponential_biased + - abseil/strings/cordz_handle (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/synchronization/synchronization + - abseil/strings/cordz_info (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/container/inlined_vector + - abseil/debugging/stacktrace + - abseil/strings/cord_internal + - abseil/strings/cordz_functions + - abseil/strings/cordz_handle + - abseil/strings/cordz_statistics + - abseil/strings/cordz_update_tracker + - abseil/synchronization/synchronization + - abseil/types/span + - abseil/strings/cordz_statistics (1.20220623.0): + - abseil/base/config + - abseil/strings/cordz_update_tracker + - abseil/strings/cordz_update_scope (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/strings/cord_internal + - abseil/strings/cordz_info + - abseil/strings/cordz_update_tracker + - abseil/strings/cordz_update_tracker (1.20220623.0): + - abseil/base/config + - abseil/strings/internal (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/meta/type_traits + - abseil/strings/str_format (1.20220623.0): + - abseil/strings/str_format_internal + - abseil/strings/str_format_internal (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/functional/function_ref + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/numeric/representation + - abseil/strings/strings + - abseil/types/optional + - abseil/types/span + - abseil/utility/utility + - abseil/strings/strings (1.20220623.0): + - abseil/base/base + - abseil/base/config + - abseil/base/core_headers + - abseil/base/endian + - abseil/base/raw_logging_internal + - abseil/base/throw_delegate + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/numeric/bits + - abseil/numeric/int128 + - abseil/strings/internal + - abseil/synchronization/graphcycles_internal (1.20220623.0): + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/synchronization/kernel_timeout_internal (1.20220623.0): + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/time/time + - abseil/synchronization/synchronization (1.20220623.0): + - abseil/base/atomic_hook + - abseil/base/base + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/base/dynamic_annotations + - abseil/base/malloc_internal + - abseil/base/raw_logging_internal + - abseil/debugging/stacktrace + - abseil/debugging/symbolize + - abseil/synchronization/graphcycles_internal + - abseil/synchronization/kernel_timeout_internal + - abseil/time/time + - abseil/time (1.20220623.0): + - abseil/time/internal (= 1.20220623.0) + - abseil/time/time (= 1.20220623.0) + - abseil/time/internal (1.20220623.0): + - abseil/time/internal/cctz (= 1.20220623.0) + - abseil/time/internal/cctz (1.20220623.0): + - abseil/time/internal/cctz/civil_time (= 1.20220623.0) + - abseil/time/internal/cctz/time_zone (= 1.20220623.0) + - abseil/time/internal/cctz/civil_time (1.20220623.0): + - abseil/base/config + - abseil/time/internal/cctz/time_zone (1.20220623.0): + - abseil/base/config + - abseil/time/internal/cctz/civil_time + - abseil/time/time (1.20220623.0): + - abseil/base/base + - abseil/base/core_headers + - abseil/base/raw_logging_internal + - abseil/numeric/int128 + - abseil/strings/strings + - abseil/time/internal/cctz/civil_time + - abseil/time/internal/cctz/time_zone + - abseil/types (1.20220623.0): + - abseil/types/any (= 1.20220623.0) + - abseil/types/bad_any_cast (= 1.20220623.0) + - abseil/types/bad_any_cast_impl (= 1.20220623.0) + - abseil/types/bad_optional_access (= 1.20220623.0) + - abseil/types/bad_variant_access (= 1.20220623.0) + - abseil/types/compare (= 1.20220623.0) + - abseil/types/optional (= 1.20220623.0) + - abseil/types/span (= 1.20220623.0) + - abseil/types/variant (= 1.20220623.0) + - abseil/types/any (1.20220623.0): + - abseil/base/config + - abseil/base/core_headers + - abseil/base/fast_type_id + - abseil/meta/type_traits + - abseil/types/bad_any_cast + - abseil/utility/utility + - abseil/types/bad_any_cast (1.20220623.0): + - abseil/base/config + - abseil/types/bad_any_cast_impl + - abseil/types/bad_any_cast_impl (1.20220623.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/bad_optional_access (1.20220623.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/bad_variant_access (1.20220623.0): + - abseil/base/config + - abseil/base/raw_logging_internal + - abseil/types/compare (1.20220623.0): + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/optional (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/memory/memory + - abseil/meta/type_traits + - abseil/types/bad_optional_access + - abseil/utility/utility + - abseil/types/span (1.20220623.0): + - abseil/algorithm/algorithm + - abseil/base/core_headers + - abseil/base/throw_delegate + - abseil/meta/type_traits + - abseil/types/variant (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/base/core_headers + - abseil/meta/type_traits + - abseil/types/bad_variant_access + - abseil/utility/utility + - abseil/utility/utility (1.20220623.0): + - abseil/base/base_internal + - abseil/base/config + - abseil/meta/type_traits - Alamofire (5.8.1) + - BoringSSL-GRPC (0.0.24): + - BoringSSL-GRPC/Implementation (= 0.0.24) + - BoringSSL-GRPC/Interface (= 0.0.24) + - BoringSSL-GRPC/Implementation (0.0.24): + - BoringSSL-GRPC/Interface (= 0.0.24) + - BoringSSL-GRPC/Interface (0.0.24) - CombineCocoa (0.4.1) - DropDown (2.3.13) + - FirebaseAnalytics (10.19.0): + - FirebaseAnalytics/AdIdSupport (= 10.19.0) + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAnalytics/AdIdSupport (10.19.0): + - FirebaseCore (~> 10.0) + - FirebaseInstallations (~> 10.0) + - GoogleAppMeasurement (= 10.19.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseAppCheckInterop (10.19.0) + - FirebaseAuth (10.19.0): + - FirebaseAppCheckInterop (~> 10.17) + - FirebaseCore (~> 10.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.8) + - GoogleUtilities/Environment (~> 7.8) + - GTMSessionFetcher/Core (< 4.0, >= 2.1) + - RecaptchaInterop (~> 100.0) - FirebaseCore (10.17.0): - FirebaseCoreInternal (~> 10.0) - GoogleUtilities/Environment (~> 7.8) - GoogleUtilities/Logger (~> 7.8) + - FirebaseCoreExtension (10.19.0): + - FirebaseCore (~> 10.0) - FirebaseCoreInternal (10.17.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - FirebaseDynamicLinks (10.17.0): - FirebaseCore (~> 10.0) + - FirebaseFirestore (10.19.0): + - FirebaseCore (~> 10.0) + - FirebaseCoreExtension (~> 10.0) + - FirebaseFirestoreInternal (~> 10.17) + - FirebaseSharedSwift (~> 10.0) + - FirebaseFirestoreInternal (10.19.0): + - abseil/algorithm (~> 1.20220623.0) + - abseil/base (~> 1.20220623.0) + - abseil/container/flat_hash_map (~> 1.20220623.0) + - abseil/memory (~> 1.20220623.0) + - abseil/meta (~> 1.20220623.0) + - abseil/strings/strings (~> 1.20220623.0) + - abseil/time (~> 1.20220623.0) + - abseil/types (~> 1.20220623.0) + - FirebaseAppCheckInterop (~> 10.17) + - FirebaseCore (~> 10.0) + - "gRPC-C++ (~> 1.49.1)" + - leveldb-library (~> 1.22) + - nanopb (< 2.30910.0, >= 2.30908.0) + - FirebaseInstallations (10.19.0): + - FirebaseCore (~> 10.0) + - GoogleUtilities/Environment (~> 7.8) + - GoogleUtilities/UserDefaults (~> 7.8) + - PromisesObjC (~> 2.1) + - FirebaseSharedSwift (10.19.0) + - GoogleAppMeasurement (10.19.0): + - GoogleAppMeasurement/AdIdSupport (= 10.19.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/AdIdSupport (10.19.0): + - GoogleAppMeasurement/WithoutAdIdSupport (= 10.19.0) + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleAppMeasurement/WithoutAdIdSupport (10.19.0): + - GoogleUtilities/AppDelegateSwizzler (~> 7.11) + - GoogleUtilities/MethodSwizzler (~> 7.11) + - GoogleUtilities/Network (~> 7.11) + - "GoogleUtilities/NSData+zlib (~> 7.11)" + - nanopb (< 2.30910.0, >= 2.30908.0) + - GoogleUtilities/AppDelegateSwizzler (7.12.0): + - GoogleUtilities/Environment + - GoogleUtilities/Logger + - GoogleUtilities/Network - GoogleUtilities/Environment (7.12.0): - PromisesObjC (< 3.0, >= 1.2) - GoogleUtilities/Logger (7.12.0): - GoogleUtilities/Environment + - GoogleUtilities/MethodSwizzler (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/Network (7.12.0): + - GoogleUtilities/Logger + - "GoogleUtilities/NSData+zlib" + - GoogleUtilities/Reachability - "GoogleUtilities/NSData+zlib (7.12.0)" + - GoogleUtilities/Reachability (7.12.0): + - GoogleUtilities/Logger + - GoogleUtilities/UserDefaults (7.12.0): + - GoogleUtilities/Logger + - "gRPC-C++ (1.49.1)": + - "gRPC-C++/Implementation (= 1.49.1)" + - "gRPC-C++/Interface (= 1.49.1)" + - "gRPC-C++/Implementation (1.49.1)": + - abseil/base/base (= 1.20220623.0) + - abseil/base/core_headers (= 1.20220623.0) + - abseil/cleanup/cleanup (= 1.20220623.0) + - abseil/container/flat_hash_map (= 1.20220623.0) + - abseil/container/flat_hash_set (= 1.20220623.0) + - abseil/container/inlined_vector (= 1.20220623.0) + - abseil/functional/any_invocable (= 1.20220623.0) + - abseil/functional/bind_front (= 1.20220623.0) + - abseil/functional/function_ref (= 1.20220623.0) + - abseil/hash/hash (= 1.20220623.0) + - abseil/memory/memory (= 1.20220623.0) + - abseil/meta/type_traits (= 1.20220623.0) + - abseil/random/random (= 1.20220623.0) + - abseil/status/status (= 1.20220623.0) + - abseil/status/statusor (= 1.20220623.0) + - abseil/strings/cord (= 1.20220623.0) + - abseil/strings/str_format (= 1.20220623.0) + - abseil/strings/strings (= 1.20220623.0) + - abseil/synchronization/synchronization (= 1.20220623.0) + - abseil/time/time (= 1.20220623.0) + - abseil/types/optional (= 1.20220623.0) + - abseil/types/span (= 1.20220623.0) + - abseil/types/variant (= 1.20220623.0) + - abseil/utility/utility (= 1.20220623.0) + - "gRPC-C++/Interface (= 1.49.1)" + - gRPC-Core (= 1.49.1) + - "gRPC-C++/Interface (1.49.1)" + - gRPC-Core (1.49.1): + - gRPC-Core/Implementation (= 1.49.1) + - gRPC-Core/Interface (= 1.49.1) + - gRPC-Core/Implementation (1.49.1): + - abseil/base/base (= 1.20220623.0) + - abseil/base/core_headers (= 1.20220623.0) + - abseil/container/flat_hash_map (= 1.20220623.0) + - abseil/container/flat_hash_set (= 1.20220623.0) + - abseil/container/inlined_vector (= 1.20220623.0) + - abseil/functional/any_invocable (= 1.20220623.0) + - abseil/functional/bind_front (= 1.20220623.0) + - abseil/functional/function_ref (= 1.20220623.0) + - abseil/hash/hash (= 1.20220623.0) + - abseil/memory/memory (= 1.20220623.0) + - abseil/meta/type_traits (= 1.20220623.0) + - abseil/random/random (= 1.20220623.0) + - abseil/status/status (= 1.20220623.0) + - abseil/status/statusor (= 1.20220623.0) + - abseil/strings/cord (= 1.20220623.0) + - abseil/strings/str_format (= 1.20220623.0) + - abseil/strings/strings (= 1.20220623.0) + - abseil/synchronization/synchronization (= 1.20220623.0) + - abseil/time/time (= 1.20220623.0) + - abseil/types/optional (= 1.20220623.0) + - abseil/types/span (= 1.20220623.0) + - abseil/types/variant (= 1.20220623.0) + - abseil/utility/utility (= 1.20220623.0) + - BoringSSL-GRPC (= 0.0.24) + - gRPC-Core/Interface (= 1.49.1) + - gRPC-Core/Interface (1.49.1) + - GTMSessionFetcher/Core (3.2.0) - KakaoSDKAuth (2.18.2): - KakaoSDKCommon (= 2.18.2) - KakaoSDKCommon (2.18.2): @@ -35,21 +819,31 @@ PODS: - KakaoSDKUser (2.18.2): - KakaoSDKAuth (= 2.18.2) - Kingfisher (7.10.0) + - leveldb-library (1.22.2) - Moya (15.0.0): - Moya/Core (= 15.0.0) - Moya/Core (15.0.0): - Alamofire (~> 5.0) + - nanopb (2.30909.1): + - nanopb/decode (= 2.30909.1) + - nanopb/encode (= 2.30909.1) + - nanopb/decode (2.30909.1) + - nanopb/encode (2.30909.1) - NMapsGeometry (1.0.1) - NMapsMap (3.17.0): - NMapsGeometry - PromisesObjC (2.3.1) + - RecaptchaInterop (100.0.0) - SnapKit (5.6.0) - Then (3.0.0) DEPENDENCIES: - CombineCocoa - DropDown (from `https://github.com/thingineeer/DropDown.git`, commit `95ee36f7bd925d466033c2c169979f1c574bf3b9`) + - FirebaseAnalytics + - FirebaseAuth - FirebaseDynamicLinks + - FirebaseFirestore - KakaoSDKAuth - KakaoSDKCommon - KakaoSDKShare @@ -64,12 +858,26 @@ DEPENDENCIES: SPEC REPOS: trunk: + - abseil - Alamofire + - BoringSSL-GRPC - CombineCocoa + - FirebaseAnalytics + - FirebaseAppCheckInterop + - FirebaseAuth - FirebaseCore + - FirebaseCoreExtension - FirebaseCoreInternal - FirebaseDynamicLinks + - FirebaseFirestore + - FirebaseFirestoreInternal + - FirebaseInstallations + - FirebaseSharedSwift + - GoogleAppMeasurement - GoogleUtilities + - "gRPC-C++" + - gRPC-Core + - GTMSessionFetcher - KakaoSDKAuth - KakaoSDKCommon - KakaoSDKShare @@ -77,10 +885,13 @@ SPEC REPOS: - KakaoSDKTemplate - KakaoSDKUser - Kingfisher + - leveldb-library - Moya + - nanopb - NMapsGeometry - NMapsMap - PromisesObjC + - RecaptchaInterop - SnapKit - Then @@ -95,13 +906,27 @@ CHECKOUT OPTIONS: :git: https://github.com/thingineeer/DropDown.git SPEC CHECKSUMS: + abseil: 926fb7a82dc6d2b8e1f2ed7f3a718bce691d1e46 Alamofire: 3ca42e259043ee0dc5c0cdd76c4bc568b8e42af7 + BoringSSL-GRPC: 3175b25143e648463a56daeaaa499c6cb86dad33 CombineCocoa: e5210dbfb480ff251078929459ac17e750e7af1d DropDown: bf260fd688978138019ad7d94f63a2362dad85ba + FirebaseAnalytics: 87513010b13b7c8610164d3602ea10571f76afc1 + FirebaseAppCheckInterop: 37884781f3e16a1ba47e7ec80a1e805f987788e3 + FirebaseAuth: 2492acdcd1245d841fabdf58a050d6aa07dfce3f FirebaseCore: 534544dd98cabcf4bf8598d88ec683b02319a528 + FirebaseCoreExtension: c08d14c7b22e07994e876d837e6f58642f340087 FirebaseCoreInternal: 2cf9202e226e3f78d2bf6d56c472686b935bfb7f FirebaseDynamicLinks: 66878206d55d4aba6e63744f57151a80d76e472e + FirebaseFirestore: 9b9b21120c1a0cb4f2789ffb7fbb9138f94c47eb + FirebaseFirestoreInternal: a15405fb607dfd14edd568bba77028f4c7a69688 + FirebaseInstallations: 033d199474164db20c8350736842a94fe717b960 + FirebaseSharedSwift: f34eeb7d3ea87a34497629b6ca41657beadef76a + GoogleAppMeasurement: 68afe759316673c6554dac35a0c7ae8f5d6cb4ed GoogleUtilities: 0759d1a57ebb953965c2dfe0ba4c82e95ccc2e34 + "gRPC-C++": 2df8cba576898bdacd29f0266d5236fa0e26ba6a + gRPC-Core: a21a60aefc08c68c247b439a9ef97174b0c54f96 + GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8 KakaoSDKAuth: 3daf72ec463876e0fe6d0d37c7d6b0b2729169f1 KakaoSDKCommon: 516f68bc6b223ed502c34a362d6ecc9145e0dcc0 KakaoSDKShare: 8980e83a3a80bd805ab859c102dd41ed6801424e @@ -109,13 +934,16 @@ SPEC CHECKSUMS: KakaoSDKTemplate: 0fcfbbb7cc05986fe6690b85e19dd8de0fc634e6 KakaoSDKUser: 5b0826033381d314f550dd90fbf70d3612044ad6 Kingfisher: a18f05d3b6d37d8650ee4a3e61d57a28fc6207f6 + leveldb-library: f03246171cce0484482ec291f88b6d563699ee06 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee + nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 NMapsGeometry: 53c573ead66466681cf123f99f698dc8071a4b83 NMapsMap: a5b909a31b6f3d27a670f6eb2ddc913c38975474 PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4 + RecaptchaInterop: 7d1a4a01a6b2cb1610a47ef3f85f0c411434cb21 SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 Then: 844265ae87834bbe1147d91d5d41a404da2ec27d -PODFILE CHECKSUM: a1846e0d9fa164fc8d0a63bb343a6b7ba18187b9 +PODFILE CHECKSUM: db3805234cfa742a710f669ccf32e9c5999acd12 COCOAPODS: 1.12.1 diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index a2fd75f3..135fc43f 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -7,13 +7,14 @@ objects = { /* Begin PBXBuildFile section */ - 0AEBD608F3973389E8E1C6D6 /* Pods_Runnect_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 015778D02D5CDE0838284CD7 /* Pods_Runnect_iOS.framework */; }; 232686362B03AF4400675A17 /* NetworkProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 232686352B03AF4400675A17 /* NetworkProvider.swift */; }; 23EE06C12AC1AD5200CB3FF8 /* LocationSelectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE06C02AC1AD5200CB3FF8 /* LocationSelectView.swift */; }; 23EE06C52AC1AE1900CB3FF8 /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE06C42AC1AE1900CB3FF8 /* BaseView.swift */; }; 23EE06C92AC1DED100CB3FF8 /* GesturePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE06C82AC1DED100CB3FF8 /* GesturePublisher.swift */; }; 23EE06CB2AC2AF3E00CB3FF8 /* KakaoAddressSearchingResponseDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE06CA2AC2AF3E00CB3FF8 /* KakaoAddressSearchingResponseDto.swift */; }; 23EE06D12AC2F44E00CB3FF8 /* TmapAddressSearchingResponseDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23EE06D02AC2F44E00CB3FF8 /* TmapAddressSearchingResponseDto.swift */; }; + 3C62B428BF25A30FFC4986FD /* Pods_Runnect_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2A56E6A578CF1D4B9CC0A92 /* Pods_Runnect_iOS.framework */; }; + 711E18212B38516D00C651CD /* GAManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 711E18202B38516D00C651CD /* GAManager.swift */; }; 71288ECF2B26ECDB00D6C921 /* UserInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */; }; 71288ED12B26ECF600D6C921 /* UserProgressCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */; }; 71288ED32B26ED2500D6C921 /* UserUploadedLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */; }; @@ -175,15 +176,15 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 015778D02D5CDE0838284CD7 /* Pods_Runnect_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runnect_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 232686352B03AF4400675A17 /* NetworkProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkProvider.swift; sourceTree = ""; }; 23EE06C02AC1AD5200CB3FF8 /* LocationSelectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationSelectView.swift; sourceTree = ""; }; 23EE06C42AC1AE1900CB3FF8 /* BaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseView.swift; sourceTree = ""; }; 23EE06C82AC1DED100CB3FF8 /* GesturePublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GesturePublisher.swift; sourceTree = ""; }; 23EE06CA2AC2AF3E00CB3FF8 /* KakaoAddressSearchingResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoAddressSearchingResponseDto.swift; sourceTree = ""; }; 23EE06D02AC2F44E00CB3FF8 /* TmapAddressSearchingResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TmapAddressSearchingResponseDto.swift; sourceTree = ""; }; - 3C3033C911343B5C57EB68E7 /* Pods-Runnect-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runnect-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS.debug.xcconfig"; sourceTree = ""; }; + 6DE30BB0DA64D0E80DF7EBA4 /* Pods-Runnect-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runnect-iOS.release.xcconfig"; path = "Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS.release.xcconfig"; sourceTree = ""; }; 7110A6032AA337DD009A7E99 /* Runnect-iOSDebug.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Runnect-iOSDebug.entitlements"; sourceTree = ""; }; + 711E18202B38516D00C651CD /* GAManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GAManager.swift; sourceTree = ""; }; 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoCell.swift; sourceTree = ""; }; 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProgressCell.swift; sourceTree = ""; }; 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserUploadedLabelCell.swift; sourceTree = ""; }; @@ -218,6 +219,7 @@ A3E624FF2A15262B008370FF /* GoalRewardTitleCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoalRewardTitleCVC.swift; sourceTree = ""; }; A3F67AE1296D33AC001598A2 /* MyPageDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageDto.swift; sourceTree = ""; }; A3F67AE9296E4936001598A2 /* ActivityRecordInfoDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityRecordInfoDto.swift; sourceTree = ""; }; + B53163DB8E122B5017E13CB5 /* Pods-Runnect-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runnect-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS.debug.xcconfig"; sourceTree = ""; }; CE09037C296E9ED900BEA710 /* ScrapCourseResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrapCourseResponseDto.swift; sourceTree = ""; }; CE0C23732966D62A00B45063 /* PagedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PagedView.swift; sourceTree = ""; }; CE0C23762966D64D00B45063 /* PageCVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageCVC.swift; sourceTree = ""; }; @@ -345,6 +347,7 @@ CEEC6B4A2961D89700D00E1E /* CustomNavigationBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomNavigationBar.swift; sourceTree = ""; }; CEF3CD99296DB305002723A1 /* CourseDetailResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetailResponseDto.swift; sourceTree = ""; }; CEFA9A2E29FC263700F2D0CF /* UserDeleteResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDeleteResponseDto.swift; sourceTree = ""; }; + D2A56E6A578CF1D4B9CC0A92 /* Pods_Runnect_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runnect_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DA0587F12A05D54100B72869 /* EditCourseRequestDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditCourseRequestDto.swift; sourceTree = ""; }; DA0587F32A05DEC000B72869 /* CourseEditVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseEditVC.swift; sourceTree = ""; }; DA20D846296697A600F1581F /* MyCourseSelectVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyCourseSelectVC.swift; sourceTree = ""; }; @@ -354,7 +357,6 @@ DAD5A3D7296C6D9600C8166B /* AdImageCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdImageCollectionViewCell.swift; sourceTree = ""; }; DAD5A3D9296C6DA500C8166B /* TitleCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleCollectionViewCell.swift; sourceTree = ""; }; DAD5A3E1296D4C6500C8166B /* PickedMapListResponseDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PickedMapListResponseDto.swift; sourceTree = ""; }; - E837271A78E1C0A0C30789BF /* Pods-Runnect-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runnect-iOS.release.xcconfig"; path = "Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -362,7 +364,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0AEBD608F3973389E8E1C6D6 /* Pods_Runnect_iOS.framework in Frameworks */, + 3C62B428BF25A30FFC4986FD /* Pods_Runnect_iOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -380,18 +382,18 @@ 3F7098551CF7A77F3FE7EB2B /* Pods */ = { isa = PBXGroup; children = ( - 3C3033C911343B5C57EB68E7 /* Pods-Runnect-iOS.debug.xcconfig */, - E837271A78E1C0A0C30789BF /* Pods-Runnect-iOS.release.xcconfig */, + B53163DB8E122B5017E13CB5 /* Pods-Runnect-iOS.debug.xcconfig */, + 6DE30BB0DA64D0E80DF7EBA4 /* Pods-Runnect-iOS.release.xcconfig */, ); path = Pods; sourceTree = ""; }; - 4BAB0487E0060209ADC1C28C /* Frameworks */ = { + 711E181F2B38515B00C651CD /* Manager */ = { isa = PBXGroup; children = ( - 015778D02D5CDE0838284CD7 /* Pods_Runnect_iOS.framework */, + 711E18202B38516D00C651CD /* GAManager.swift */, ); - name = Frameworks; + path = Manager; sourceTree = ""; }; 71288ED42B26EDF300D6C921 /* CollectionViewCell */ = { @@ -838,7 +840,7 @@ CE4545C7295D7AF4003201E1 /* Runnect-iOS */, CE4545C6295D7AF4003201E1 /* Products */, 3F7098551CF7A77F3FE7EB2B /* Pods */, - 4BAB0487E0060209ADC1C28C /* Frameworks */, + F05BC4258FDC2EFA777FBF06 /* Frameworks */, ); sourceTree = ""; }; @@ -943,6 +945,7 @@ CE6655AA295D7FAE00C64E12 /* Global */ = { isa = PBXGroup; children = ( + 711E181F2B38515B00C651CD /* Manager */, 23EE06C32AC1AE0600CB3FF8 /* Base */, CE6655B6295D803C00C64E12 /* UIComponents */, CE6655B5295D803800C64E12 /* Literal */, @@ -1251,6 +1254,14 @@ path = ResponseDto; sourceTree = ""; }; + F05BC4258FDC2EFA777FBF06 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D2A56E6A578CF1D4B9CC0A92 /* Pods_Runnect_iOS.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -1258,12 +1269,12 @@ isa = PBXNativeTarget; buildConfigurationList = CE4545D9295D7AF5003201E1 /* Build configuration list for PBXNativeTarget "Runnect-iOS" */; buildPhases = ( - 5E54A0A4C236151ED373DD47 /* [CP] Check Pods Manifest.lock */, + D3529E1DC35A6AFFFA6448E4 /* [CP] Check Pods Manifest.lock */, CE665613295D980700C64E12 /* ShellScript */, CE4545C1295D7AF4003201E1 /* Sources */, CE4545C2295D7AF4003201E1 /* Frameworks */, CE4545C3295D7AF4003201E1 /* Resources */, - CF0A7C4CF1329EF14A755C46 /* [CP] Embed Pods Frameworks */, + 942CED198E027B2DE5375553 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -1327,26 +1338,21 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 5E54A0A4C236151ED373DD47 /* [CP] Check Pods Manifest.lock */ = { + 942CED198E027B2DE5375553 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runnect-iOS-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; CE665613295D980700C64E12 /* ShellScript */ = { @@ -1367,21 +1373,26 @@ shellPath = /bin/sh; shellScript = "export PATH=\"$PATH:/opt/homebrew/bin\"\nif which swiftlint > /dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; }; - CF0A7C4CF1329EF14A755C46 /* [CP] Embed Pods Frameworks */ = { + D3529E1DC35A6AFFFA6448E4 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runnect-iOS-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runnect-iOS/Pods-Runnect-iOS-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -1400,6 +1411,7 @@ CEC2A68729629B9B00160BF7 /* NickNameSetUpVC.swift in Sources */, CE665602295D918000C64E12 /* JsonCoder.swift in Sources */, DA97A033296E65D80086760E /* CourseUploadingRequestDto.swift in Sources */, + 711E18212B38516D00C651CD /* GAManager.swift in Sources */, CE4545CD295D7AF4003201E1 /* TaBarController.swift in Sources */, A3305A97296EF58C000B1A10 /* GoalRewardInfoDto.swift in Sources */, CE21C024299E5FE500F62AF5 /* UserRouter.swift in Sources */, @@ -1679,7 +1691,7 @@ }; CE4545DA295D7AF5003201E1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3C3033C911343B5C57EB68E7 /* Pods-Runnect-iOS.debug.xcconfig */; + baseConfigurationReference = B53163DB8E122B5017E13CB5 /* Pods-Runnect-iOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -1721,7 +1733,7 @@ }; CE4545DB295D7AF5003201E1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E837271A78E1C0A0C30789BF /* Pods-Runnect-iOS.release.xcconfig */; + baseConfigurationReference = 6DE30BB0DA64D0E80DF7EBA4 /* Pods-Runnect-iOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; diff --git a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift new file mode 100644 index 00000000..040dce3f --- /dev/null +++ b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift @@ -0,0 +1,39 @@ +// +// GAManager.swift +// Runnect-iOS +// +// Created by 이명진 on 12/24/23. +// + +import UIKit + +import FirebaseAnalytics + +final class GAManager { + static let shared = GAManager() + + private init() {} + + enum EventType { + case screen(screenName: String) + + var eventName: String { + switch self { + case .screen: + return "screen" + } + } + + var parameters: [String: Any]? { + switch self { + case .screen(let screenName): + ["screen": screenName] + } + } + } + + func logEvent(eventType: EventType) { + Analytics.logEvent(eventType.eventName, parameters: eventType.parameters) + } + +} From 3be038464c7e92ed85e61af5b6d721e01d138170 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sun, 24 Dec 2023 21:54:22 +0900 Subject: [PATCH 02/19] =?UTF-8?q?[Feat]=20#230=20-=20=EC=86=8C=EC=85=9C?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20GA=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index 38843ac1..566fc677 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -55,6 +55,7 @@ final class SignInSocialLoginVC: UIViewController { setNavigationBar() setLayout() setAddTarget() + analyze() } } @@ -232,3 +233,9 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi print("Apple Login error") } } + +extension SignInSocialLoginVC { + private func analyze() { + GAManager.shared.logEvent(eventType: .screen(screenName: "소셜 로그인 화면")) + } +} From d4af00bbff52caf5e6cdcbce4ff0a1fbe7be54fa Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Mon, 25 Dec 2023 17:14:17 +0900 Subject: [PATCH 03/19] =?UTF-8?q?[Chore]=20#230=20-=20library=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Podfile.lock | 68 ++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Runnect-iOS/Podfile.lock b/Runnect-iOS/Podfile.lock index 19e5c15e..8d3bcb26 100644 --- a/Runnect-iOS/Podfile.lock +++ b/Runnect-iOS/Podfile.lock @@ -663,15 +663,15 @@ PODS: - GoogleUtilities/Environment (~> 7.8) - GTMSessionFetcher/Core (< 4.0, >= 2.1) - RecaptchaInterop (~> 100.0) - - FirebaseCore (10.17.0): + - FirebaseCore (10.19.0): - FirebaseCoreInternal (~> 10.0) - - GoogleUtilities/Environment (~> 7.8) - - GoogleUtilities/Logger (~> 7.8) + - GoogleUtilities/Environment (~> 7.12) + - GoogleUtilities/Logger (~> 7.12) - FirebaseCoreExtension (10.19.0): - FirebaseCore (~> 10.0) - - FirebaseCoreInternal (10.17.0): + - FirebaseCoreInternal (10.19.0): - "GoogleUtilities/NSData+zlib (~> 7.8)" - - FirebaseDynamicLinks (10.17.0): + - FirebaseDynamicLinks (10.19.0): - FirebaseCore (~> 10.0) - FirebaseFirestore (10.19.0): - FirebaseCore (~> 10.0) @@ -799,26 +799,26 @@ PODS: - gRPC-Core/Interface (= 1.49.1) - gRPC-Core/Interface (1.49.1) - GTMSessionFetcher/Core (3.2.0) - - KakaoSDKAuth (2.18.2): - - KakaoSDKCommon (= 2.18.2) - - KakaoSDKCommon (2.18.2): - - KakaoSDKCommon/Common (= 2.18.2) - - KakaoSDKCommon/Network (= 2.18.2) - - KakaoSDKCommon/Common (2.18.2) - - KakaoSDKCommon/Network (2.18.2): + - KakaoSDKAuth (2.20.0): + - KakaoSDKCommon (= 2.20.0) + - KakaoSDKCommon (2.20.0): + - KakaoSDKCommon/Common (= 2.20.0) + - KakaoSDKCommon/Network (= 2.20.0) + - KakaoSDKCommon/Common (2.20.0) + - KakaoSDKCommon/Network (2.20.0): - Alamofire (~> 5.1) - - KakaoSDKCommon/Common (= 2.18.2) - - KakaoSDKShare (2.18.2): - - KakaoSDKCommon (= 2.18.2) - - KakaoSDKTemplate (= 2.18.2) - - KakaoSDKTalk (2.18.2): - - KakaoSDKTemplate (= 2.18.2) - - KakaoSDKUser (= 2.18.2) - - KakaoSDKTemplate (2.18.2): - - KakaoSDKCommon/Common (= 2.18.2) - - KakaoSDKUser (2.18.2): - - KakaoSDKAuth (= 2.18.2) - - Kingfisher (7.10.0) + - KakaoSDKCommon/Common (= 2.20.0) + - KakaoSDKShare (2.20.0): + - KakaoSDKCommon (= 2.20.0) + - KakaoSDKTemplate (= 2.20.0) + - KakaoSDKTalk (2.20.0): + - KakaoSDKTemplate (= 2.20.0) + - KakaoSDKUser (= 2.20.0) + - KakaoSDKTemplate (2.20.0): + - KakaoSDKCommon/Common (= 2.20.0) + - KakaoSDKUser (2.20.0): + - KakaoSDKAuth (= 2.20.0) + - Kingfisher (7.10.1) - leveldb-library (1.22.2) - Moya (15.0.0): - Moya/Core (= 15.0.0) @@ -914,10 +914,10 @@ SPEC CHECKSUMS: FirebaseAnalytics: 87513010b13b7c8610164d3602ea10571f76afc1 FirebaseAppCheckInterop: 37884781f3e16a1ba47e7ec80a1e805f987788e3 FirebaseAuth: 2492acdcd1245d841fabdf58a050d6aa07dfce3f - FirebaseCore: 534544dd98cabcf4bf8598d88ec683b02319a528 + FirebaseCore: dc5c7badf99d47613c52b2e3a57a64cd187f8554 FirebaseCoreExtension: c08d14c7b22e07994e876d837e6f58642f340087 - FirebaseCoreInternal: 2cf9202e226e3f78d2bf6d56c472686b935bfb7f - FirebaseDynamicLinks: 66878206d55d4aba6e63744f57151a80d76e472e + FirebaseCoreInternal: b444828ea7cfd594fca83046b95db98a2be4f290 + FirebaseDynamicLinks: bd0455c62de367bb46605692af35e423fd7b3b69 FirebaseFirestore: 9b9b21120c1a0cb4f2789ffb7fbb9138f94c47eb FirebaseFirestoreInternal: a15405fb607dfd14edd568bba77028f4c7a69688 FirebaseInstallations: 033d199474164db20c8350736842a94fe717b960 @@ -927,13 +927,13 @@ SPEC CHECKSUMS: "gRPC-C++": 2df8cba576898bdacd29f0266d5236fa0e26ba6a gRPC-Core: a21a60aefc08c68c247b439a9ef97174b0c54f96 GTMSessionFetcher: 41b9ef0b4c08a6db4b7eb51a21ae5183ec99a2c8 - KakaoSDKAuth: 3daf72ec463876e0fe6d0d37c7d6b0b2729169f1 - KakaoSDKCommon: 516f68bc6b223ed502c34a362d6ecc9145e0dcc0 - KakaoSDKShare: 8980e83a3a80bd805ab859c102dd41ed6801424e - KakaoSDKTalk: 567d2697b419b4f01f2f8bdb28e13100817c4090 - KakaoSDKTemplate: 0fcfbbb7cc05986fe6690b85e19dd8de0fc634e6 - KakaoSDKUser: 5b0826033381d314f550dd90fbf70d3612044ad6 - Kingfisher: a18f05d3b6d37d8650ee4a3e61d57a28fc6207f6 + KakaoSDKAuth: 02742f4681af6da8c4aa7b0f71df98ca9e7df834 + KakaoSDKCommon: 060a8085733a215a048f9bf9b39a846d1be1daee + KakaoSDKShare: 70a86eb93016d8e4e64f3adda1650a8646cbbc01 + KakaoSDKTalk: 245db634d63f8a21e8b80bcfe5ca1aff407b1018 + KakaoSDKTemplate: d0481c3d8a7e74646a585fc0e551fc18f7fdc6ac + KakaoSDKUser: 0594b37675fb634304da3ecc83830c0ec84ceef5 + Kingfisher: bc5abe80a8e0144537ef1dd5a0b2621b04f7f439 leveldb-library: f03246171cce0484482ec291f88b6d563699ee06 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 From 34bcf913a1571aaef94da743ef1c7c0fe7972520 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Mon, 25 Dec 2023 17:15:34 +0900 Subject: [PATCH 04/19] =?UTF-8?q?[Docs]=20#230=20-=20Podfile=20=EB=82=B4?= =?UTF-8?q?=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cocoaPods로 라이브러리 이슈가 있어서 임시로 달아놨습니다. --- Runnect-iOS/Podfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Runnect-iOS/Podfile b/Runnect-iOS/Podfile index 92d9d7ed..e9033b6d 100644 --- a/Runnect-iOS/Podfile +++ b/Runnect-iOS/Podfile @@ -36,4 +36,17 @@ post_install do |installer| end end end + + +post_install do |installer| + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + xcconfig_path = config.base_configuration_reference.real_path + xcconfig = File.read(xcconfig_path) + xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR") + File.open(xcconfig_path, "w") { |file| file << xcconfig_mod } + end + end +end + end From 7a665c68a3ba2256393feca712d274e69d2ed9a9 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Mon, 25 Dec 2023 17:15:51 +0900 Subject: [PATCH 05/19] =?UTF-8?q?[Feat]=20#230=20-=20GA=20=EB=94=94?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EB=AA=A8=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcshareddata/xcschemes/Runnect-iOS.xcscheme | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/xcshareddata/xcschemes/Runnect-iOS.xcscheme b/Runnect-iOS/Runnect-iOS.xcodeproj/xcshareddata/xcschemes/Runnect-iOS.xcscheme index 911cbe3a..1ee1ed34 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/xcshareddata/xcschemes/Runnect-iOS.xcscheme +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/xcshareddata/xcschemes/Runnect-iOS.xcscheme @@ -51,6 +51,12 @@ ReferencedContainer = "container:Runnect-iOS.xcodeproj"> + + + + Date: Mon, 25 Dec 2023 17:16:24 +0900 Subject: [PATCH 06/19] =?UTF-8?q?[Feat]=20#230=20-=20GA=20=EB=94=94?= =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=BD=94=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift | 1 + Runnect-iOS/Runnect-iOS/Global/Supports/AppDelegate.swift | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift index 040dce3f..bb8e3f26 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift @@ -34,6 +34,7 @@ final class GAManager { func logEvent(eventType: EventType) { Analytics.logEvent(eventType.eventName, parameters: eventType.parameters) + print("언제 찍히는거지?") } } diff --git a/Runnect-iOS/Runnect-iOS/Global/Supports/AppDelegate.swift b/Runnect-iOS/Runnect-iOS/Global/Supports/AppDelegate.swift index 644c78fa..b50f1bf8 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Supports/AppDelegate.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Supports/AppDelegate.swift @@ -11,6 +11,8 @@ import NMapsMap import KakaoSDKAuth import KakaoSDKCommon import FirebaseCore +import FirebaseFirestore +import FirebaseAuth @main class AppDelegate: UIResponder, UIApplicationDelegate { From dc54f0cdfed9e9f2d3b6d687cf0ad3eedd9d9e0a Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Fri, 29 Dec 2023 19:32:07 +0900 Subject: [PATCH 07/19] =?UTF-8?q?[Feat]=20#230=20-=20GA=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=B6=94=EC=A0=81=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Podfile | 12 ------------ Runnect-iOS/Podfile.lock | 2 +- .../Runnect-iOS/Global/Manager/GAManager.swift | 5 +++++ .../CourseDetail/VC/CourseDetailVC.swift | 7 +++++++ 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Runnect-iOS/Podfile b/Runnect-iOS/Podfile index e9033b6d..40453cee 100644 --- a/Runnect-iOS/Podfile +++ b/Runnect-iOS/Podfile @@ -37,16 +37,4 @@ post_install do |installer| end end - -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - xcconfig_path = config.base_configuration_reference.real_path - xcconfig = File.read(xcconfig_path) - xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR") - File.open(xcconfig_path, "w") { |file| file << xcconfig_mod } - end - end -end - end diff --git a/Runnect-iOS/Podfile.lock b/Runnect-iOS/Podfile.lock index 5d6b8d5a..ee6f96e8 100644 --- a/Runnect-iOS/Podfile.lock +++ b/Runnect-iOS/Podfile.lock @@ -944,6 +944,6 @@ SPEC CHECKSUMS: SnapKit: e01d52ebb8ddbc333eefe2132acf85c8227d9c25 Then: 844265ae87834bbe1147d91d5d41a404da2ec27d -PODFILE CHECKSUM: db3805234cfa742a710f669ccf32e9c5999acd12 +PODFILE CHECKSUM: 74de7f641476f143613e7b2bfe2c3275248503e4 COCOAPODS: 1.14.3 diff --git a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift index bb8e3f26..aeec0e34 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift @@ -16,11 +16,14 @@ final class GAManager { enum EventType { case screen(screenName: String) + case button(buttonName: String) var eventName: String { switch self { case .screen: return "screen" + case .button: + return "button" } } @@ -28,6 +31,8 @@ final class GAManager { switch self { case .screen(let screenName): ["screen": screenName] + case .button(let buttonName): + ["button": buttonName] } } } diff --git a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift index 6f3948e9..14e58c1e 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift @@ -144,6 +144,7 @@ final class CourseDetailVC: UIViewController { setLayout() setAddTarget() setRefreshControl() + analyze() self.hideTabBar(wantsToHide: true) } @@ -662,3 +663,9 @@ extension CourseDetailVC { } } } + +extension CourseDetailVC { + private func analyze() { + GAManager.shared.logEvent(eventType: .screen(screenName: "코스 상세 페이지")) + } +} From a6712b010822ca705f01ec5069a6f2c95229cd75 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 30 Dec 2023 18:51:25 +0900 Subject: [PATCH 08/19] =?UTF-8?q?[Setting]=20#230=20-=20=EB=B9=8C=EB=93=9C?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj | 8 ++++---- Runnect-iOS/Runnect-iOS/Info.plist | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index fa0d9cf3..d161ecdf 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -1706,7 +1706,7 @@ CODE_SIGN_ENTITLEMENTS = "Runnect-iOS/Runnect-iOSDebug.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.0.6; + CURRENT_PROJECT_VERSION = 1.0.7; DEVELOPMENT_TEAM = 8Q4H7X3Q58; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = "Runnect-iOS/Info.plist"; @@ -1724,7 +1724,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.6; + MARKETING_VERSION = 1.0.5; PRODUCT_BUNDLE_IDENTIFIER = "com.runnect.Runnect-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1747,7 +1747,7 @@ CODE_SIGN_ENTITLEMENTS = "Runnect-iOS/Runnect-iOS.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.0.6; + CURRENT_PROJECT_VERSION = 1.0.7; DEVELOPMENT_TEAM = 8Q4H7X3Q58; GENERATE_INFOPLIST_FILE = NO; INFOPLIST_FILE = "Runnect-iOS/Info.plist"; @@ -1765,7 +1765,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.6; + MARKETING_VERSION = 1.0.5; PRODUCT_BUNDLE_IDENTIFIER = "com.runnect.Runnect-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Runnect-iOS/Runnect-iOS/Info.plist b/Runnect-iOS/Runnect-iOS/Info.plist index 6491388b..6da05c70 100644 --- a/Runnect-iOS/Runnect-iOS/Info.plist +++ b/Runnect-iOS/Runnect-iOS/Info.plist @@ -2,11 +2,6 @@ - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -22,7 +17,7 @@ CFBundlePackageType $(PRODUCT_BUNDLE_PACKAGE_TYPE) CFBundleShortVersionString - 1.0.6 + 1.0.7 CFBundleURLTypes @@ -56,6 +51,11 @@ LSRequiresIPhoneOS + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSLocationAlwaysAndWhenInUseUsageDescription 코스 출발지 설정과 러닝 트래킹을 위해 현재 위치 정보를 사용하도록 허용합니다. NSLocationAlwaysUsageDescription From a49e5d80e54e7e1b36dc6112fa796102275d8a1e Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Tue, 2 Jan 2024 21:29:24 +0900 Subject: [PATCH 09/19] =?UTF-8?q?[Feat]=20#230=20-=20Event=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj | 10 +++++++--- .../Global/{Manager => Analytics}/GAManager.swift | 6 ++---- 2 files changed, 9 insertions(+), 7 deletions(-) rename Runnect-iOS/Runnect-iOS/Global/{Manager => Analytics}/GAManager.swift (87%) diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index d161ecdf..ec48671c 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -26,6 +26,7 @@ 71802C5C2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71802C5B2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift */; }; 71BAD06A2B24CECC0061E31D /* UserProfileDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BAD0692B24CECC0061E31D /* UserProfileDto.swift */; }; 71BAD06C2B24D1F70061E31D /* UserProfileVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BAD06B2B24D1F70061E31D /* UserProfileVC.swift */; }; + 71D80E7E2B4429BD00765149 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D80E7D2B4429BD00765149 /* Event.swift */; }; 71F7804E2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F7804D2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift */; }; 71F780502B0893D700B53253 /* MarathonMapCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F7804F2B0893D700B53253 /* MarathonMapCollectionViewCell.swift */; }; A3305A97296EF58C000B1A10 /* GoalRewardInfoDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3305A96296EF58C000B1A10 /* GoalRewardInfoDto.swift */; }; @@ -198,6 +199,7 @@ 71802C5B2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetailScrapCountDto.swift; sourceTree = ""; }; 71BAD0692B24CECC0061E31D /* UserProfileDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileDto.swift; sourceTree = ""; }; 71BAD06B2B24D1F70061E31D /* UserProfileVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileVC.swift; sourceTree = ""; }; + 71D80E7D2B4429BD00765149 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Event.swift; path = ../../../../../Event.swift; sourceTree = ""; }; 71F7804D2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarathonTitleCollectionViewCell.swift; sourceTree = ""; }; 71F7804F2B0893D700B53253 /* MarathonMapCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarathonMapCollectionViewCell.swift; sourceTree = ""; }; A3305A96296EF58C000B1A10 /* GoalRewardInfoDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoalRewardInfoDto.swift; sourceTree = ""; }; @@ -392,12 +394,13 @@ path = Pods; sourceTree = ""; }; - 711E181F2B38515B00C651CD /* Manager */ = { + 711E181F2B38515B00C651CD /* Analytics */ = { isa = PBXGroup; children = ( 711E18202B38516D00C651CD /* GAManager.swift */, + 71D80E7D2B4429BD00765149 /* Event.swift */, ); - path = Manager; + path = Analytics; sourceTree = ""; }; 71288ED42B26EDF300D6C921 /* CollectionViewCell */ = { @@ -951,7 +954,7 @@ CE6655AA295D7FAE00C64E12 /* Global */ = { isa = PBXGroup; children = ( - 711E181F2B38515B00C651CD /* Manager */, + 711E181F2B38515B00C651CD /* Analytics */, 23EE06C32AC1AE0600CB3FF8 /* Base */, CE6655B6295D803C00C64E12 /* UIComponents */, CE6655B5295D803800C64E12 /* Literal */, @@ -1484,6 +1487,7 @@ DA0587F42A05DEC000B72869 /* CourseEditVC.swift in Sources */, CE6655FE295D912300C64E12 /* calculateTopInset.swift in Sources */, CEEC6B492961C5E200D00E1E /* SplashVC.swift in Sources */, + 71D80E7E2B4429BD00765149 /* Event.swift in Sources */, CE6655D0295D85FF00C64E12 /* CancelBag.swift in Sources */, 23EE06C12AC1AD5200CB3FF8 /* LocationSelectView.swift in Sources */, CE102C4A29DBAD3D00E23E69 /* AuthInterceptor.swift in Sources */, diff --git a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift similarity index 87% rename from Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift rename to Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift index aeec0e34..110d921f 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Manager/GAManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift @@ -30,16 +30,14 @@ final class GAManager { var parameters: [String: Any]? { switch self { case .screen(let screenName): - ["screen": screenName] + return ["screen": screenName] case .button(let buttonName): - ["button": buttonName] + return ["button": buttonName] } } } func logEvent(eventType: EventType) { Analytics.logEvent(eventType.eventName, parameters: eventType.parameters) - print("언제 찍히는거지?") } - } From 9d673b4b0c3eb312c18ce882fdba0c2e93f39cac Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Tue, 2 Jan 2024 21:38:38 +0900 Subject: [PATCH 10/19] =?UTF-8?q?[Feat]=20#230=20-=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EA=B7=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runnect-iOS.xcodeproj/project.pbxproj | 8 +-- .../Runnect-iOS/Global/Analytics/Event.swift | 63 +++++++++++++++++++ 2 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index ec48671c..76df93b5 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ 71288ECF2B26ECDB00D6C921 /* UserInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */; }; 71288ED12B26ECF600D6C921 /* UserProgressCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */; }; 71288ED32B26ED2500D6C921 /* UserUploadedLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */; }; + 712DB0702B443ACC0013FD79 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712DB06F2B443ACC0013FD79 /* Event.swift */; }; 712F661D2A7B7BAB00D9539B /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712F661C2A7B7BAB00D9539B /* Config.swift */; }; 7136BF8A2AF921A900679364 /* CustomBottomSheetVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7136BF892AF921A900679364 /* CustomBottomSheetVC.swift */; }; 713A98F02B29DD9900189B3C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 713A98EF2B29DD9900189B3C /* GoogleService-Info.plist */; }; @@ -26,7 +27,6 @@ 71802C5C2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71802C5B2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift */; }; 71BAD06A2B24CECC0061E31D /* UserProfileDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BAD0692B24CECC0061E31D /* UserProfileDto.swift */; }; 71BAD06C2B24D1F70061E31D /* UserProfileVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BAD06B2B24D1F70061E31D /* UserProfileVC.swift */; }; - 71D80E7E2B4429BD00765149 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D80E7D2B4429BD00765149 /* Event.swift */; }; 71F7804E2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F7804D2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift */; }; 71F780502B0893D700B53253 /* MarathonMapCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F7804F2B0893D700B53253 /* MarathonMapCollectionViewCell.swift */; }; A3305A97296EF58C000B1A10 /* GoalRewardInfoDto.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3305A96296EF58C000B1A10 /* GoalRewardInfoDto.swift */; }; @@ -191,6 +191,7 @@ 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoCell.swift; sourceTree = ""; }; 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProgressCell.swift; sourceTree = ""; }; 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserUploadedLabelCell.swift; sourceTree = ""; }; + 712DB06F2B443ACC0013FD79 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; 712F661C2A7B7BAB00D9539B /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 7136BF892AF921A900679364 /* CustomBottomSheetVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomBottomSheetVC.swift; sourceTree = ""; }; 713A98EF2B29DD9900189B3C /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; @@ -199,7 +200,6 @@ 71802C5B2B3364C2008DBCEE /* CourseDetailScrapCountDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CourseDetailScrapCountDto.swift; sourceTree = ""; }; 71BAD0692B24CECC0061E31D /* UserProfileDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileDto.swift; sourceTree = ""; }; 71BAD06B2B24D1F70061E31D /* UserProfileVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileVC.swift; sourceTree = ""; }; - 71D80E7D2B4429BD00765149 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Event.swift; path = ../../../../../Event.swift; sourceTree = ""; }; 71F7804D2B0893B600B53253 /* MarathonTitleCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarathonTitleCollectionViewCell.swift; sourceTree = ""; }; 71F7804F2B0893D700B53253 /* MarathonMapCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarathonMapCollectionViewCell.swift; sourceTree = ""; }; A3305A96296EF58C000B1A10 /* GoalRewardInfoDto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoalRewardInfoDto.swift; sourceTree = ""; }; @@ -398,7 +398,7 @@ isa = PBXGroup; children = ( 711E18202B38516D00C651CD /* GAManager.swift */, - 71D80E7D2B4429BD00765149 /* Event.swift */, + 712DB06F2B443ACC0013FD79 /* Event.swift */, ); path = Analytics; sourceTree = ""; @@ -1487,7 +1487,7 @@ DA0587F42A05DEC000B72869 /* CourseEditVC.swift in Sources */, CE6655FE295D912300C64E12 /* calculateTopInset.swift in Sources */, CEEC6B492961C5E200D00E1E /* SplashVC.swift in Sources */, - 71D80E7E2B4429BD00765149 /* Event.swift in Sources */, + 712DB0702B443ACC0013FD79 /* Event.swift in Sources */, CE6655D0295D85FF00C64E12 /* CancelBag.swift in Sources */, 23EE06C12AC1AD5200CB3FF8 /* LocationSelectView.swift in Sources */, CE102C4A29DBAD3D00E23E69 /* AuthInterceptor.swift in Sources */, diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift new file mode 100644 index 00000000..8a18099b --- /dev/null +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift @@ -0,0 +1,63 @@ +// +// Event.swift +// Runnect-iOS +// +// Created by 이명진 on 1/2/24. +// + +import Foundation + +struct Event { + struct View { + static let viewHome = "view_home" // 앱 실행 + } + + struct Button { + + // 로그인 + + static let clickAppleLogin = "click_apple_login" + static let clickKaKaoLogin = "click_kakao_login" + + + // 탭바 + + static let clickCourseDrawingTabBar = "click_course_drawing_tab_bar" + static let clickStorageTabBar = "click_storage_tab_bar" + static let clickCourseDiscoveryTabBar = "click_course_discovery_tab_bar" + static let clickMyPageTabBar = "click_my_page_tab_bar" + + + // 코스 그리기 + + static let clickCourseDrawing = "click_course_drawing" + static let clickCurrentLocate = "click_current_locate" + static let clickMapLocate = "click_map_locate" + static let clickStoredAfterCourseComplete = "click_stored_after_course_complete" + static let clickRunAfterCourseComplete = "click_run_after_course_complete" + + + // 러닝 트래킹 + + static let clickBackRunningTracking = "click_back_running_tracking" + static let clickStoreRunningTracking = "click_store_running_tracking" + + + /// 코스 발견 + + static let clickDate = "click_date_sort" + static let clickScrap = "click_scrap_sort" + static let clickUploadButton = "click_upload_button" + static let clickTrySearchCourse = "click_try_search_course" + static let clickTryBanner = "click_try_banner" + static let clickSearchCourse = "click_search_course" + static let clickCourseDetail = "click_course_detail" + static let clickShare = "click_share" + static let clickUserProfile = "click_user_profile" + static let clickScrapPageStartCourse = "click_scrap_page_start_course" + static let clickUploadCourse = "click_upload_course" + + + /// 보관함 + } +} From 3122ab20c09b9ad94c53c02962a9f766346e122d Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Wed, 3 Jan 2024 20:03:57 +0900 Subject: [PATCH 11/19] =?UTF-8?q?[Add]=20#230=20-=20GA=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 보관함, 마이페이지, 방문자 모드에서 발생할 수 있는 이벤트를 추가하였습니다. --- .../Runnect-iOS/Global/Analytics/Event.swift | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift index 8a18099b..45507aad 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift @@ -15,36 +15,27 @@ struct Event { struct Button { // 로그인 - static let clickAppleLogin = "click_apple_login" static let clickKaKaoLogin = "click_kakao_login" - // 탭바 - static let clickCourseDrawingTabBar = "click_course_drawing_tab_bar" static let clickStorageTabBar = "click_storage_tab_bar" static let clickCourseDiscoveryTabBar = "click_course_discovery_tab_bar" static let clickMyPageTabBar = "click_my_page_tab_bar" - // 코스 그리기 - static let clickCourseDrawing = "click_course_drawing" static let clickCurrentLocate = "click_current_locate" static let clickMapLocate = "click_map_locate" static let clickStoredAfterCourseComplete = "click_stored_after_course_complete" static let clickRunAfterCourseComplete = "click_run_after_course_complete" - // 러닝 트래킹 - static let clickBackRunningTracking = "click_back_running_tracking" static let clickStoreRunningTracking = "click_store_running_tracking" - /// 코스 발견 - static let clickDate = "click_date_sort" static let clickScrap = "click_scrap_sort" static let clickUploadButton = "click_upload_button" @@ -57,7 +48,27 @@ struct Event { static let clickScrapPageStartCourse = "click_scrap_page_start_course" static let clickUploadCourse = "click_upload_course" - /// 보관함 + static let clickMyStorageCourseStart = "click_my_storage_course_start" + static let clickMyStorageTryModify = "click_my_storage_try_modify" + static let clickMyStorageTryRemove = "click_my_storage_try_remove" + static let clickScrapCourse = "click_scrap_course" + + // 마이페이지 + static let clickRunningRecord = "click_running_record" + static let clickGoalReward = "click_goal_reward" + static let clickUploadedCourse = "click_uploaded_course" + static let clickCourseDrawingInRunningRecord = "click_course_drawing_in_running_record" + static let clickCourseUploadInUploadedCourse = "click_course_upload_in_uploaded_course" + static let clickTryLogout = "click_try_logout" + static let clickTryWithdraw = "click_try_withdraw" + static let clickSuccessLogout = "click_success_logout" + static let clickSuccessWithdraw = "click_success_withdraw" + + /// 방문자 모드 + static let clickJoinInCourseDrawing = "click_join_in_course_drawing" + static let clickJoinInCourseDiscovery = "click_join_in_course_discovery" + static let clickJoinInStorage = "click_join_in_storage" + static let clickJoinInMyPage = "click_join_in_my_page" } } From b835c0476e34df5b9937427abcae6b3ecb9604ca Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Wed, 3 Jan 2024 20:53:44 +0900 Subject: [PATCH 12/19] =?UTF-8?q?[Feat]=20#230=20-=20=ED=99=88=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4,=20=EB=B0=A9=EB=AC=B8=EC=9E=90=20=EB=AA=A8=EB=93=9C?= =?UTF-8?q?=20=EB=B2=84=ED=8A=BC=EC=97=90=20GA=20=EB=8B=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift | 1 + .../Runnect-iOS/Global/Supports/SceneDelegate.swift | 8 ++++++++ .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift index 45507aad..6c29697c 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift @@ -17,6 +17,7 @@ struct Event { // 로그인 static let clickAppleLogin = "click_apple_login" static let clickKaKaoLogin = "click_kakao_login" + static let clickVisitor = "click_visitor" // 탭바 static let clickCourseDrawingTabBar = "click_course_drawing_tab_bar" diff --git a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift index b0c4de39..84a6dcae 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift @@ -33,6 +33,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { self.window = window window.makeKeyAndVisible() + analyze() + } func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { @@ -122,6 +124,12 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } } +extension SceneDelegate { + private func analyze() { + GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewHome)) + } +} + extension CourseDetailVC { func getUploadedCourseDetail(courseId: Int?) { guard let publicCourseId = courseId else { return } diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index 566fc677..0872a2da 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -123,6 +123,8 @@ extension SignInSocialLoginVC { @objc private func visitorButtonDidTap() { UserManager.shared.userType = .visitor pushToTabBarController() + + analyzeVisitorMode() } } @@ -145,6 +147,10 @@ extension SignInSocialLoginVC { guard let window = self.view.window else { return } ViewControllerUtils.setRootViewController(window: window, viewController: tabBarController, withAnimation: true) } + + private func analyzeVisitorMode() { + GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickVisitor)) + } } // MARK: - UI & Layout From 5941858eff15008d305b713d6eba97285876c624 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Thu, 4 Jan 2024 18:07:25 +0900 Subject: [PATCH 13/19] =?UTF-8?q?[Feat]=20#230=20-=20=EC=95=A0=ED=94=8C=20?= =?UTF-8?q?=EC=B9=B4=EC=B9=B4=EC=98=A4=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20GA?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index 0872a2da..a5d9cc1b 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -86,6 +86,7 @@ extension SignInSocialLoginVC { print(error) } else { print("카카오 톡으로 로그인 성공") + self.kakaoLoginSuccessAnalyze() guard let oauthToken = oauthToken else { return } UserManager.shared.signIn(token: oauthToken.accessToken, provider: "KAKAO") { [weak self] result in switch result { @@ -221,7 +222,7 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi switch result { case .success(let type): - + self?.appleLoginSuccessAnalyze() type == "Signup" ? self?.pushToNickNameSetUpVC() : self?.pushToTabBarController() case .failure(let error): print(error) @@ -244,4 +245,12 @@ extension SignInSocialLoginVC { private func analyze() { GAManager.shared.logEvent(eventType: .screen(screenName: "소셜 로그인 화면")) } + + private func kakaoLoginSuccessAnalyze() { + GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickKaKaoLogin)) + } + + private func appleLoginSuccessAnalyze() { + GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickAppleLogin)) + } } From d256388262d00a95af2f536e2f72507e2f9f3afa Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 00:57:39 +0900 Subject: [PATCH 14/19] =?UTF-8?q?[Chore]=20#230=20-=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=84=A4=EC=9E=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index a5d9cc1b..3100b395 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -243,7 +243,7 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi extension SignInSocialLoginVC { private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: "소셜 로그인 화면")) + GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewHome)) } private func kakaoLoginSuccessAnalyze() { From 2c72847ddd4036b9ec7515c23e4df24af3e6e73b Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 00:59:33 +0900 Subject: [PATCH 15/19] =?UTF-8?q?[Add]=20#230=20-=20=EC=86=8C=EC=85=9C=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EB=B7=B0=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift | 1 + .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift index 6c29697c..2f7fd473 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift @@ -10,6 +10,7 @@ import Foundation struct Event { struct View { static let viewHome = "view_home" // 앱 실행 + static let viewSocialLogin = "view_social_login" } struct Button { diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index 3100b395..ad481fe1 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -243,7 +243,7 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi extension SignInSocialLoginVC { private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewHome)) + GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewSocialLogin)) } private func kakaoLoginSuccessAnalyze() { From 4149779a5dce1545897dd0784126f26e91fe4c52 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 16:04:07 +0900 Subject: [PATCH 16/19] =?UTF-8?q?[Refactor]=20#230=20-=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=A6=AC=EB=B7=B0=201=EC=B0=A8=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Runnect-iOS.xcodeproj/project.pbxproj | 8 +- .../Analytics/{Event.swift => GAEvent.swift} | 6 +- .../Global/Analytics/GAManager.swift | 4 +- .../Global/Supports/SceneDelegate.swift | 2 +- .../SignIn/VC/SignInSocialLoginVC.swift | 74 ++++++++----------- 5 files changed, 40 insertions(+), 54 deletions(-) rename Runnect-iOS/Runnect-iOS/Global/Analytics/{Event.swift => GAEvent.swift} (98%) diff --git a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj index 76df93b5..b0a0acf0 100644 --- a/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj +++ b/Runnect-iOS/Runnect-iOS.xcodeproj/project.pbxproj @@ -18,7 +18,7 @@ 71288ECF2B26ECDB00D6C921 /* UserInfoCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */; }; 71288ED12B26ECF600D6C921 /* UserProgressCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */; }; 71288ED32B26ED2500D6C921 /* UserUploadedLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */; }; - 712DB0702B443ACC0013FD79 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712DB06F2B443ACC0013FD79 /* Event.swift */; }; + 712DB0702B443ACC0013FD79 /* GAEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712DB06F2B443ACC0013FD79 /* GAEvent.swift */; }; 712F661D2A7B7BAB00D9539B /* Config.swift in Sources */ = {isa = PBXBuildFile; fileRef = 712F661C2A7B7BAB00D9539B /* Config.swift */; }; 7136BF8A2AF921A900679364 /* CustomBottomSheetVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7136BF892AF921A900679364 /* CustomBottomSheetVC.swift */; }; 713A98F02B29DD9900189B3C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 713A98EF2B29DD9900189B3C /* GoogleService-Info.plist */; }; @@ -191,7 +191,7 @@ 71288ECE2B26ECDB00D6C921 /* UserInfoCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoCell.swift; sourceTree = ""; }; 71288ED02B26ECF600D6C921 /* UserProgressCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProgressCell.swift; sourceTree = ""; }; 71288ED22B26ED2500D6C921 /* UserUploadedLabelCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserUploadedLabelCell.swift; sourceTree = ""; }; - 712DB06F2B443ACC0013FD79 /* Event.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Event.swift; sourceTree = ""; }; + 712DB06F2B443ACC0013FD79 /* GAEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GAEvent.swift; sourceTree = ""; }; 712F661C2A7B7BAB00D9539B /* Config.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Config.swift; sourceTree = ""; }; 7136BF892AF921A900679364 /* CustomBottomSheetVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomBottomSheetVC.swift; sourceTree = ""; }; 713A98EF2B29DD9900189B3C /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; @@ -398,7 +398,7 @@ isa = PBXGroup; children = ( 711E18202B38516D00C651CD /* GAManager.swift */, - 712DB06F2B443ACC0013FD79 /* Event.swift */, + 712DB06F2B443ACC0013FD79 /* GAEvent.swift */, ); path = Analytics; sourceTree = ""; @@ -1487,7 +1487,7 @@ DA0587F42A05DEC000B72869 /* CourseEditVC.swift in Sources */, CE6655FE295D912300C64E12 /* calculateTopInset.swift in Sources */, CEEC6B492961C5E200D00E1E /* SplashVC.swift in Sources */, - 712DB0702B443ACC0013FD79 /* Event.swift in Sources */, + 712DB0702B443ACC0013FD79 /* GAEvent.swift in Sources */, CE6655D0295D85FF00C64E12 /* CancelBag.swift in Sources */, 23EE06C12AC1AD5200CB3FF8 /* LocationSelectView.swift in Sources */, CE102C4A29DBAD3D00E23E69 /* AuthInterceptor.swift in Sources */, diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAEvent.swift similarity index 98% rename from Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift rename to Runnect-iOS/Runnect-iOS/Global/Analytics/GAEvent.swift index 2f7fd473..e18bfe74 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Analytics/Event.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAEvent.swift @@ -1,5 +1,5 @@ // -// Event.swift +// GAEvent.swift // Runnect-iOS // // Created by 이명진 on 1/2/24. @@ -7,7 +7,7 @@ import Foundation -struct Event { +struct GAEvent { struct View { static let viewHome = "view_home" // 앱 실행 static let viewSocialLogin = "view_social_login" @@ -49,7 +49,7 @@ struct Event { static let clickUserProfile = "click_user_profile" static let clickScrapPageStartCourse = "click_scrap_page_start_course" static let clickUploadCourse = "click_upload_course" - + /// 보관함 static let clickMyStorageCourseStart = "click_my_storage_course_start" static let clickMyStorageTryModify = "click_my_storage_try_modify" diff --git a/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift index 110d921f..cd59d61a 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Analytics/GAManager.swift @@ -14,7 +14,7 @@ final class GAManager { private init() {} - enum EventType { + enum GAEventType { case screen(screenName: String) case button(buttonName: String) @@ -37,7 +37,7 @@ final class GAManager { } } - func logEvent(eventType: EventType) { + func logEvent(eventType: GAEventType) { Analytics.logEvent(eventType.eventName, parameters: eventType.parameters) } } diff --git a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift index 84a6dcae..ffad5417 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift @@ -126,7 +126,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { extension SceneDelegate { private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewHome)) + GAManager.shared.logEvent(eventType: .screen(screenName: GAEvent.View.viewHome)) } } diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index ad481fe1..a5285321 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -18,9 +18,9 @@ import KakaoSDKCommon final class SignInSocialLoginVC: UIViewController { // MARK: - Properties - + let screenWidth = UIScreen.main.bounds.width - + // MARK: - UI Components private let backgroundImageView = UIImageView().then { @@ -55,7 +55,6 @@ final class SignInSocialLoginVC: UIViewController { setNavigationBar() setLayout() setAddTarget() - analyze() } } @@ -70,7 +69,7 @@ extension SignInSocialLoginVC { let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] - + let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self @@ -86,7 +85,7 @@ extension SignInSocialLoginVC { print(error) } else { print("카카오 톡으로 로그인 성공") - self.kakaoLoginSuccessAnalyze() + self.analyze(buttonName: GAEvent.Button.clickKaKaoLogin) guard let oauthToken = oauthToken else { return } UserManager.shared.signIn(token: oauthToken.accessToken, provider: "KAKAO") { [weak self] result in switch result { @@ -124,8 +123,7 @@ extension SignInSocialLoginVC { @objc private func visitorButtonDidTap() { UserManager.shared.userType = .visitor pushToTabBarController() - - analyzeVisitorMode() + analyze(buttonName: GAEvent.Button.clickVisitor) } } @@ -148,10 +146,6 @@ extension SignInSocialLoginVC { guard let window = self.view.window else { return } ViewControllerUtils.setRootViewController(window: window, viewController: tabBarController, withAnimation: true) } - - private func analyzeVisitorMode() { - GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickVisitor)) - } } // MARK: - UI & Layout @@ -206,32 +200,32 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi /// Apple ID 연동 성공 시 func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) { - switch authorization.credential { - /// Apple ID - case let appleIDCredential as ASAuthorizationAppleIDCredential: + switch authorization.credential { + /// Apple ID + case let appleIDCredential as ASAuthorizationAppleIDCredential: + + /// 계정 정보 가져오기 + let userIdentifier = appleIDCredential.user + let idToken = appleIDCredential.identityToken! + guard let tokeStr = String(data: idToken, encoding: .utf8) else { return } + + print("User ID : \(userIdentifier)") + print("token : \(String(describing: tokeStr))") + + UserManager.shared.signIn(token: tokeStr, provider: "APPLE") { [weak self] result in - /// 계정 정보 가져오기 - let userIdentifier = appleIDCredential.user - let idToken = appleIDCredential.identityToken! - guard let tokeStr = String(data: idToken, encoding: .utf8) else { return } - - print("User ID : \(userIdentifier)") - print("token : \(String(describing: tokeStr))") - - UserManager.shared.signIn(token: tokeStr, provider: "APPLE") { [weak self] result in + switch result { + case .success(let type): + self?.analyze(buttonName: GAEvent.Button.clickAppleLogin) + type == "Signup" ? self?.pushToNickNameSetUpVC() : self?.pushToTabBarController() + case .failure(let error): + print(error) + self?.showNetworkFailureToast() - switch result { - case .success(let type): - self?.appleLoginSuccessAnalyze() - type == "Signup" ? self?.pushToNickNameSetUpVC() : self?.pushToTabBarController() - case .failure(let error): - print(error) - self?.showNetworkFailureToast() - - } } - default: - break + } + default: + break } } @@ -242,15 +236,7 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi } extension SignInSocialLoginVC { - private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: Event.View.viewSocialLogin)) - } - - private func kakaoLoginSuccessAnalyze() { - GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickKaKaoLogin)) - } - - private func appleLoginSuccessAnalyze() { - GAManager.shared.logEvent(eventType: .button(buttonName: Event.Button.clickAppleLogin)) + private func analyze(buttonName: String) { + GAManager.shared.logEvent(eventType: .button(buttonName: buttonName)) } } From 4227e61bb15a741d982c869d9c0bac5cf0aa2e56 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 16:04:22 +0900 Subject: [PATCH 17/19] =?UTF-8?q?[Add]=20#230=20-=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=B0=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index a5285321..c2bc873c 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -55,6 +55,7 @@ final class SignInSocialLoginVC: UIViewController { setNavigationBar() setLayout() setAddTarget() + analyze(screenName: GAEvent.View.viewSocialLogin) } } @@ -236,6 +237,10 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi } extension SignInSocialLoginVC { + private func analyze(screenName: String) { + GAManager.shared.logEvent(eventType: .screen(screenName: screenName)) + } + private func analyze(buttonName: String) { GAManager.shared.logEvent(eventType: .button(buttonName: buttonName)) } From 2906cd9906c6992e7baf5dd78c1d380223948539 Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 16:24:17 +0900 Subject: [PATCH 18/19] =?UTF-8?q?[Refactor]=20#230=20-=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EB=A6=AC=EB=B7=B0=202=EC=B0=A8=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Global/Extension/UIKit+/UIView+.swift | 17 +++++++++++++---- .../Extension/UIKit+/UIViewController+.swift | 10 ++++++++++ .../Global/Supports/SceneDelegate.swift | 14 ++++++-------- .../CourseDetail/VC/CourseDetailVC.swift | 12 +----------- .../SignIn/VC/SignInSocialLoginVC.swift | 12 +----------- 5 files changed, 31 insertions(+), 34 deletions(-) diff --git a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIView+.swift b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIView+.swift index c8bbabb5..7262b8d0 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIView+.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIView+.swift @@ -38,10 +38,9 @@ extension UIView { } /// view에 tap gesture를 연결해주는 함수 - func gesture(_ gestureType: GestureType = .tap()) -> - GesturePublisher { - .init(view: self, gestureType: gestureType) - } + func gesture(_ gestureType: GestureType = .tap()) -> GesturePublisher { + .init(view: self, gestureType: gestureType) + } } class XibView: UIView { @@ -55,3 +54,13 @@ class XibView: UIView { addSubviewFromNib(view: self) } } + +extension UIView { + func analyze(screenName: String) { + GAManager.shared.logEvent(eventType: .screen(screenName: screenName)) + } + + func analyze(buttonName: String) { + GAManager.shared.logEvent(eventType: .button(buttonName: buttonName)) + } +} diff --git a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIViewController+.swift b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIViewController+.swift index a61a029b..db5b6315 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIViewController+.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Extension/UIKit+/UIViewController+.swift @@ -85,3 +85,13 @@ extension UIViewController { Toast.show(message: text, view: window, safeAreaBottomInset: self.safeAreaBottomInset()) } } + +extension UIViewController { + func analyze(screenName: String) { + GAManager.shared.logEvent(eventType: .screen(screenName: screenName)) + } + + func analyze(buttonName: String) { + GAManager.shared.logEvent(eventType: .button(buttonName: buttonName)) + } +} diff --git a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift index ffad5417..455a21bb 100644 --- a/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift +++ b/Runnect-iOS/Runnect-iOS/Global/Supports/SceneDelegate.swift @@ -32,8 +32,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window.rootViewController = nav self.window = window window.makeKeyAndVisible() - - analyze() + analyze(screenName: GAEvent.View.viewHome) } @@ -50,7 +49,6 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { let window = UIWindow(windowScene: windowScene) let courseDetailVC = CourseDetailVC() -// courseDetailVC.setPublicCourseId(publicCourseId: Int(courseId)) courseDetailVC.getUploadedCourseDetail(courseId: Int(courseId)) let tabBarController = TabBarController() @@ -63,7 +61,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { window.rootViewController = navigationController window.makeKeyAndVisible() self.window = window - + } } } @@ -107,7 +105,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // Use this method to save data, release shared resources, and store enough scene-specific state information // to restore the scene back to its current state. } - + func handleDynamicLink(_ dynamicLink: DynamicLink?) -> String? { if let dynamicLink = dynamicLink, let url = dynamicLink.url, let components = URLComponents(url: url, resolvingAgainstBaseURL: false), @@ -115,7 +113,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { for item in queryItems { if item.name == "courseId", let courseId = item.value { // 동적링크 핸들링 하여 courseId 추출 - + return courseId } } @@ -125,8 +123,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } extension SceneDelegate { - private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: GAEvent.View.viewHome)) + private func analyze(screenName: String) { + GAManager.shared.logEvent(eventType: .screen(screenName: screenName)) } } diff --git a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift index 14e58c1e..cd7e38a1 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/CourseDetail/VC/CourseDetailVC.swift @@ -144,7 +144,7 @@ final class CourseDetailVC: UIViewController { setLayout() setAddTarget() setRefreshControl() - analyze() + analyze(screenName: "코스 상세 페이지") self.hideTabBar(wantsToHide: true) } @@ -288,10 +288,6 @@ extension CourseDetailVC { self.publicCourseId = publicCourseId } - func setPublicCourseId(publicCourseId: Int?) { // 추가한 것 - self.publicCourseId = publicCourseId - } - func setData(model: UploadedCourseDetailResponseDto) { self.uploadedCourseDetailModel = model self.userId = model.user.id @@ -663,9 +659,3 @@ extension CourseDetailVC { } } } - -extension CourseDetailVC { - private func analyze() { - GAManager.shared.logEvent(eventType: .screen(screenName: "코스 상세 페이지")) - } -} diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index c2bc873c..46d4d577 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -86,7 +86,7 @@ extension SignInSocialLoginVC { print(error) } else { print("카카오 톡으로 로그인 성공") - self.analyze(buttonName: GAEvent.Button.clickKaKaoLogin) + analyze(buttonName: GAEvent.Button.clickKaKaoLogin) guard let oauthToken = oauthToken else { return } UserManager.shared.signIn(token: oauthToken.accessToken, provider: "KAKAO") { [weak self] result in switch result { @@ -235,13 +235,3 @@ extension SignInSocialLoginVC: ASAuthorizationControllerPresentationContextProvi print("Apple Login error") } } - -extension SignInSocialLoginVC { - private func analyze(screenName: String) { - GAManager.shared.logEvent(eventType: .screen(screenName: screenName)) - } - - private func analyze(buttonName: String) { - GAManager.shared.logEvent(eventType: .button(buttonName: buttonName)) - } -} From dc054e085be6b2bb3e7c91dceb017ab20240c6cd Mon Sep 17 00:00:00 2001 From: LeeMyeongJin Date: Sat, 6 Jan 2024 16:34:00 +0900 Subject: [PATCH 19/19] =?UTF-8?q?[Chore]=20#230=20-=20self=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/SignIn/VC/SignInSocialLoginVC.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift index 46d4d577..d5c69d92 100644 --- a/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift +++ b/Runnect-iOS/Runnect-iOS/Presentation/SignIn/VC/SignInSocialLoginVC.swift @@ -86,7 +86,7 @@ extension SignInSocialLoginVC { print(error) } else { print("카카오 톡으로 로그인 성공") - analyze(buttonName: GAEvent.Button.clickKaKaoLogin) + self.analyze(buttonName: GAEvent.Button.clickKaKaoLogin) guard let oauthToken = oauthToken else { return } UserManager.shared.signIn(token: oauthToken.accessToken, provider: "KAKAO") { [weak self] result in switch result {