refactor(ads): Yandex 광고 코드와 SDK 의존성을 제거한다

This commit is contained in:
Yu Sung
2026-10-13 16:01:00 +09:00
parent c3b0d6e3f4
commit 9478565a04
21 changed files with 27 additions and 651 deletions
-2
View File
@@ -10,7 +10,6 @@ target 'SodaLive' do
pod 'AgoraRtm', '2.2.4'
pod 'GoogleSignIn'
pod 'GoogleSignInSwiftSupport'
pod 'YandexMobileAds', '8.0.0'
end
@@ -23,7 +22,6 @@ target 'SodaLive-dev' do
pod 'AgoraRtm', '2.2.4'
pod 'GoogleSignIn'
pod 'GoogleSignInSwiftSupport'
pod 'YandexMobileAds', '8.0.0'
end
+1 -157
View File
@@ -15,74 +15,6 @@ PODS:
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- AppMetricaAdSupport (6.0.0):
- AppMetricaCore (= 6.0.0)
- AppMetricaCoreExtension (= 6.0.0)
- AppMetricaCore (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaEncodingUtils (= 6.0.0)
- AppMetricaFMDB (= 6.0.0)
- AppMetricaHostState (= 6.0.0)
- AppMetricaIdentifiers (= 6.0.0)
- AppMetricaKeychain (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaNetwork (= 6.0.0)
- AppMetricaPlatform (= 6.0.0)
- AppMetricaProtobuf (= 6.0.0)
- AppMetricaProtobufUtils (= 6.0.0)
- AppMetricaStorageUtils (= 6.0.0)
- AppMetricaCoreExtension (6.0.0):
- AppMetricaCore (= 6.0.0)
- AppMetricaStorageUtils (= 6.0.0)
- AppMetricaCoreUtils (6.0.0):
- AppMetricaLog (= 6.0.0)
- AppMetricaEncodingUtils (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaPlatform (= 6.0.0)
- AppMetricaFMDB (6.0.0)
- AppMetricaHostState (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaIdentifiers (6.0.0):
- AppMetricaKeychain (= 6.0.0)
- AppMetricaLogSwift (= 6.0.0)
- AppMetricaPlatform (= 6.0.0)
- AppMetricaStorageUtils (= 6.0.0)
- AppMetricaSynchronization (= 6.0.0)
- AppMetricaIDSync (6.0.0):
- AppMetricaCore (= 6.0.0)
- AppMetricaCoreExtension (= 6.0.0)
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaNetwork (= 6.0.0)
- AppMetricaPlatform (= 6.0.0)
- AppMetricaStorageUtils (= 6.0.0)
- AppMetricaKeychain (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaStorageUtils (= 6.0.0)
- AppMetricaLibraryAdapter (6.0.0):
- AppMetricaCore (= 6.0.0)
- AppMetricaCoreExtension (= 6.0.0)
- AppMetricaLog (6.0.0)
- AppMetricaLogSwift (6.0.0):
- AppMetricaLog (= 6.0.0)
- AppMetricaNetwork (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaPlatform (= 6.0.0)
- AppMetricaPlatform (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaProtobuf (6.0.0)
- AppMetricaProtobufUtils (6.0.0):
- AppMetricaProtobuf (= 6.0.0)
- AppMetricaStorageUtils (6.0.0):
- AppMetricaCoreUtils (= 6.0.0)
- AppMetricaLog (= 6.0.0)
- AppMetricaSynchronization (6.0.0):
- AppMetricaLogSwift (= 6.0.0)
- Bootpay (4.4.6):
- CryptoSwift
- NVActivityIndicatorView
@@ -95,19 +27,6 @@ PODS:
- SnapKit
- SwiftyJSON
- CryptoSwift (1.8.4)
- DivKit (32.46.0):
- DivKit_LayoutKit (= 32.46.0)
- DivKit_Serialization (= 32.46.0)
- VGSL (~> 7.21)
- DivKit_LayoutKit (32.46.0):
- DivKit_LayoutKitInterface (= 32.46.0)
- VGSL (~> 7.21)
- DivKit_LayoutKitInterface (32.46.0):
- VGSL (~> 7.21)
- DivKit_Serialization (32.46.0):
- VGSL (~> 7.21)
- DivKitBinaryCompatibilityFacade (5.3.0):
- DivKit (~> 32.14)
- GoogleSignIn (9.1.0):
- AppAuth (~> 2.0)
- AppCheckCore (~> 11.0)
@@ -135,29 +54,12 @@ PODS:
- PromisesObjC (2.4.0)
- SnapKit (5.7.1)
- SwiftyJSON (5.0.2)
- VGSL (7.21.0):
- VGSLFundamentals (= 7.21.0)
- VGSLNetworking (= 7.21.0)
- VGSLUI (= 7.21.0)
- VGSLFundamentals (7.21.0)
- VGSLNetworking (7.21.0):
- VGSLFundamentals (= 7.21.0)
- VGSLUI (= 7.21.0)
- VGSLUI (7.21.0):
- VGSLFundamentals (= 7.21.0)
- YandexMobileAds (8.0.0):
- AppMetricaAdSupport (~> 6.0.0)
- AppMetricaCore (~> 6.0.0)
- AppMetricaIDSync (~> 6.0.0)
- AppMetricaLibraryAdapter (~> 6.0.0)
- DivKitBinaryCompatibilityFacade (~> 5.3.0)
DEPENDENCIES:
- AgoraRtm (= 2.2.4)
- BootpayUI (= 4.4.10)
- GoogleSignIn
- GoogleSignInSwiftSupport
- YandexMobileAds (= 8.0.0)
SPEC REPOS:
trunk:
@@ -165,33 +67,9 @@ SPEC REPOS:
- Alamofire
- AppAuth
- AppCheckCore
- AppMetricaAdSupport
- AppMetricaCore
- AppMetricaCoreExtension
- AppMetricaCoreUtils
- AppMetricaEncodingUtils
- AppMetricaFMDB
- AppMetricaHostState
- AppMetricaIdentifiers
- AppMetricaIDSync
- AppMetricaKeychain
- AppMetricaLibraryAdapter
- AppMetricaLog
- AppMetricaLogSwift
- AppMetricaNetwork
- AppMetricaPlatform
- AppMetricaProtobuf
- AppMetricaProtobufUtils
- AppMetricaStorageUtils
- AppMetricaSynchronization
- Bootpay
- BootpayUI
- CryptoSwift
- DivKit
- DivKit_LayoutKit
- DivKit_LayoutKitInterface
- DivKit_Serialization
- DivKitBinaryCompatibilityFacade
- GoogleSignIn
- GoogleSignInSwiftSupport
- GoogleUtilities
@@ -202,44 +80,15 @@ SPEC REPOS:
- PromisesObjC
- SnapKit
- SwiftyJSON
- VGSL
- VGSLFundamentals
- VGSLNetworking
- VGSLUI
- YandexMobileAds
SPEC CHECKSUMS:
AgoraRtm: 534144434383d41b3b0ebfae2a961ef0f51b0645
Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
AppMetricaAdSupport: 43a4d1509cdbfe712fb3f009fe60d3a6481816a0
AppMetricaCore: dae62fe7f95cd665b142218f3d94cf63262c195b
AppMetricaCoreExtension: 72da13ba849d4676f276ab86ff429bdf700eadc3
AppMetricaCoreUtils: 5e7c91cbafe0225dec2ded2bb3a806256e2ef791
AppMetricaEncodingUtils: a67df57f752dbbb174beea18f1de52d24853d834
AppMetricaFMDB: a3d8e45a5a85bec23a997be4469b92ab355a4df5
AppMetricaHostState: 1ac2ab5880aa30a358f55a044e57354dd8f9062f
AppMetricaIdentifiers: 00061e0cdcb371b74343a5491f54adfc1d470b25
AppMetricaIDSync: 91b403172ad78da3574c691ed34c25f69c2296ee
AppMetricaKeychain: 9ec64d877b8a3f6e823f3bbeef5e4086aa456686
AppMetricaLibraryAdapter: 56fa0f988850051d10f9ac3b6b9ace7bb6aa8fd7
AppMetricaLog: edd74df81c7557439c36c566989982f4c735e4d6
AppMetricaLogSwift: 3d2d4a3cbc33a680389b416a1c6a82ef4134da10
AppMetricaNetwork: 3dc6d768d4e932c3697c9c2c9a768de54e62059b
AppMetricaPlatform: 041a7b251ea1689e26626d9db8f331af1afe5bad
AppMetricaProtobuf: 01b141a164fa7277f641a29f30d5e571ea3d471a
AppMetricaProtobufUtils: dc48c7b84f3a1ef86ea218bbd97480ea9da4d3bc
AppMetricaStorageUtils: 78071115b9f5468d9e3b8184c456428cd9ee1dbd
AppMetricaSynchronization: 909bab97c61c0c147a435ce1620e4c8069e2d6b3
Bootpay: cd7f0542b096ab0af0b09a6e12a6b87f2cbbb531
BootpayUI: beec5b0bba002b4dbced8c0ecace571ed6a017bc
CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90
DivKit: c66e0fa88b4671f832fb9ca3f142d6f56a56919d
DivKit_LayoutKit: e30d4d345034c2dfb356e5a891dd359ac79a5aff
DivKit_LayoutKitInterface: 320f0ef8c4f95bb8212b13400502adf0259c0b21
DivKit_Serialization: c5ba4f12034eca16960e80f369b689fd8cda95b0
DivKitBinaryCompatibilityFacade: fc2284a2edea4d65aa0966006ea63274eb9f721b
GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d
GoogleSignInSwiftSupport: aca902e4e15b234611ecac74ef5c8f61278f774e
GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1
@@ -250,12 +99,7 @@ SPEC CHECKSUMS:
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
SwiftyJSON: f5b1bf1cd8dd53cd25887ac0eabcfd92301c6a5a
VGSL: 0573c2b82b05aadcba4836398ce3778d271bfd13
VGSLFundamentals: 3a081684c1a5df5800bf88aca8a9bdff2c10cfd9
VGSLNetworking: 0ea8a335bc4f4eba3f6123ffe441cf1c08f267f2
VGSLUI: 249a16cccdb75f1a5a1733894d013bca76e27c5e
YandexMobileAds: ca6c63c4148ae87fefc1821d0b466ea567069d5b
PODFILE CHECKSUM: 525ba559e93875de1314bb1a7894791eee442151
PODFILE CHECKSUM: 70c5639090824ff26cfad959985347579609e1e6
COCOAPODS: 1.16.2
+26 -72
View File
@@ -3,16 +3,10 @@
archiveVersion = 1;
classes = {
};
objectVersion = 70;
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
AC5200013012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; };
AC5200023012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; };
AC5200043012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; };
AC5200053012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; };
AC5100013012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; };
AC5100023012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; };
00C796627A6758D271215EC5 /* CreatorProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26881ED30292E28D2E5F84CD /* CreatorProfileItem.swift */; };
042BEE0C973700FB5F4540CD /* I18n.swift in Sources */ = {isa = PBXBuildFile; fileRef = 826D626B7714E5C28ED31074 /* I18n.swift */; };
0470E68C6F302A131264E3AF /* ChannelDonationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF2BFD2E09F509C44C92214 /* ChannelDonationViewModel.swift */; };
@@ -1679,7 +1673,6 @@
843C3C5366C9D9DEE37878BF /* ChannelDonationItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A7650B281CE20A6F29F6253 /* ChannelDonationItemView.swift */; };
85934EA071477BC71BFCDF5E /* Pods_SodaLive.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19E2FD56B42EBD353B9D2016 /* Pods_SodaLive.framework */; };
895286621DBE8EC8C825A9B5 /* GetPushNotificationCategoryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = B54EBFBCC66E5AC79197E1FC /* GetPushNotificationCategoryResponse.swift */; };
89AF41E6A46CD84BA469F272 /* YandexAdSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */; };
89BA3654EB2D35AC48F99472 /* LanguageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7132AA3D131A8DF7B8D783BE /* LanguageService.swift */; };
8A3E98E8F5E3862EAED3B5F9 /* FontModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25D89184D67BD63E46E90281 /* FontModifier.swift */; };
8D359DA75B6E24D9FF0A0865 /* V2vModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4AF495E30F2DB00C2FCB36 /* V2vModels.swift */; };
@@ -1711,6 +1704,12 @@
A4F100000000000000000003 /* LottieRefreshableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F100000000000000000006 /* LottieRefreshableScrollView.swift */; };
A4F100000000000000000004 /* LottieRefreshableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4F100000000000000000006 /* LottieRefreshableScrollView.swift */; };
A840136779D6CC95F94CB681 /* HomeTitleBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAA81E8424A575A0F8546D31 /* HomeTitleBar.swift */; };
AC5100013012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; };
AC5100023012000000A5BBA3 /* AuthContentSettingsSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */; };
AC5200013012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; };
AC5200023012000000A5BBA3 /* AuthVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200003012000000A5BBA3 /* AuthVerificationView.swift */; };
AC5200043012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; };
AC5200053012000000A5BBA3 /* AuthVerificationMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */; };
ACD71056E97E13E48941ABBB /* MainPlaceholderTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7900EA9FD1150BABE64CF1B3 /* MainPlaceholderTabView.swift */; };
AD6424211AA898794BBE8470 /* SectionTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16C12DFB83FE164B38CC066 /* SectionTitle.swift */; };
AEFFD4DC842837ACF98BE697 /* PostChannelDonationRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */; };
@@ -1880,7 +1879,6 @@
C0A743000000000000000011 /* UserCreatorChatSessionNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0A740000000000000000011 /* UserCreatorChatSessionNotification.swift */; };
C0D6E325AEFEEF476E7044AB /* CommunityPostCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE82912F2F111593BE42E33C /* CommunityPostCard.swift */; };
C3CFF5936F1BAC5BC12E9DDB /* UpdateContentPreferenceRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDFAA64C2CA4FCBBF00A024 /* UpdateContentPreferenceRequest.swift */; };
C45F071870A4DB48ABAE8BC5 /* YandexAdSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */; };
C4A7064704896D68ACBA135F /* PushNotificationListItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FA7A276BF4A47206ED702A7 /* PushNotificationListItemView.swift */; };
C74811010000000000000001 /* GiftBoxListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000001 /* GiftBoxListViewModel.swift */; };
C74811010000000000000002 /* GiftBoxCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C74810010000000000000002 /* GiftBoxCardView.swift */; };
@@ -2208,9 +2206,6 @@
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
AC5200003012000000A5BBA3 /* AuthVerificationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationView.swift; sourceTree = "<group>"; };
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = "<group>"; };
AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = "<group>"; };
002435A7145D59CCCA8F76D1 /* CreatorChannelFanTalkApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkApi.swift; sourceTree = "<group>"; };
0BBDC3ECBBE049EAA4057D3A /* PostChannelDonationRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PostChannelDonationRequest.swift; sourceTree = "<group>"; };
0EC05859619BDC03056911E7 /* MainTab.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = "<group>"; };
@@ -3039,6 +3034,9 @@
A4F100000000000000000006 /* LottieRefreshableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LottieRefreshableScrollView.swift; sourceTree = "<group>"; };
A575789542808C0C87AC6D82 /* AiCharacterCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AiCharacterCard.swift; sourceTree = "<group>"; };
AB63E7E31B75FF2E6F1C9073 /* LanguageSettingsView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LanguageSettingsView.swift; sourceTree = "<group>"; };
AC5100003012000000A5BBA3 /* AuthContentSettingsSheet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthContentSettingsSheet.swift; sourceTree = "<group>"; };
AC5200003012000000A5BBA3 /* AuthVerificationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationView.swift; sourceTree = "<group>"; };
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthVerificationMock.swift; sourceTree = "<group>"; };
B108032F3DC7110CBFD04130 /* Pods-SodaLive-dev.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SodaLive-dev.release.xcconfig"; path = "Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev.release.xcconfig"; sourceTree = "<group>"; };
B54EBFBCC66E5AC79197E1FC /* GetPushNotificationCategoryResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationCategoryResponse.swift; sourceTree = "<group>"; };
B7406AE69F7667FAA2E6DD23 /* CreatorDetailDialogView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorDetailDialogView.swift; sourceTree = "<group>"; };
@@ -3221,7 +3219,6 @@
E92246F5C1254CBED72AD9AD /* AudioContentCard.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioContentCard.swift; sourceTree = "<group>"; };
EDB71B1A61924B10599005FE /* CreatorChannelFanTalkCountBar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkCountBar.swift; sourceTree = "<group>"; };
EF47BCA4DC51200D63D1E2D7 /* CreatorChannelFanTalkRepository.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorChannelFanTalkRepository.swift; sourceTree = "<group>"; };
F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = YandexAdSupport.swift; sourceTree = "<group>"; };
F23D0834690CFE9FBDC10510 /* GetPushNotificationListResponse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GetPushNotificationListResponse.swift; sourceTree = "<group>"; };
F26CB443DA0ED4C45A18B258 /* PushNotificationApi.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PushNotificationApi.swift; sourceTree = "<group>"; };
F6966E927CDB1DE31F936757 /* CreatorProfileGrid.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CreatorProfileGrid.swift; sourceTree = "<group>"; };
@@ -3229,7 +3226,11 @@
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
401A3B942FEE61E000A5BBA3 /* docs */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = docs; sourceTree = "<group>"; };
401A3B942FEE61E000A5BBA3 /* docs */ = {
isa = PBXFileSystemSynchronizedRootGroup;
path = docs;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
@@ -4688,7 +4689,6 @@
4091446A2A86228E00EEBFB1 /* ActivityViewController.swift */,
375C41DF9D62AF5B9C3C1FAC /* DateParser.swift */,
6DC033E531A9420363D017CE /* FollowButtonImageAsset.swift */,
F064EC9D5711B91979F45C05 /* YandexAdSupport.swift */,
);
path = Common;
sourceTree = "<group>";
@@ -5900,6 +5900,14 @@
path = FanTalk;
sourceTree = "<group>";
};
AC5200063012000000A5BBA3 /* Auth */ = {
isa = PBXGroup;
children = (
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */,
);
path = Auth;
sourceTree = "<group>";
};
B068C16B9D7F3F80901622E8 /* Button */ = {
isa = PBXGroup;
children = (
@@ -6651,14 +6659,6 @@
path = V2;
sourceTree = "<group>";
};
AC5200063012000000A5BBA3 /* Auth */ = {
isa = PBXGroup;
children = (
AC5200033012000000A5BBA3 /* AuthVerificationMock.swift */,
);
path = Auth;
sourceTree = "<group>";
};
F4F9FC33C494BBFD8CE96749 /* Models */ = {
isa = PBXGroup;
children = (
@@ -6680,7 +6680,6 @@
40FE0E822A8361DF00252293 /* Resources */,
4055B6312CB4194C006F3D2F /* ShellScript */,
3B82B11E22594A438A9B51EF /* [CP] Embed Pods Frameworks */,
4A01C38173CBB0A3DAC22027 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -6724,7 +6723,6 @@
40FE0EA22A8362A200252293 /* Frameworks */,
40FE0EA32A8362A200252293 /* Resources */,
28183D46159D813CE54C976C /* [CP] Embed Pods Frameworks */,
A693F0C20976651410F54E89 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -6775,7 +6773,6 @@
};
};
buildConfigurationList = 40FE0E7F2A8361DF00252293 /* Build configuration list for PBXProject "SodaLive" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = ko;
hasScannedForEncodings = 0;
knownRegions = (
@@ -6804,6 +6801,7 @@
7D0E5FAF7AD538D1C2FED682 /* XCRemoteSwiftPackageReference "line-sdk-ios-swift" */,
405EC8B9303D97F30037B269 /* XCRemoteSwiftPackageReference "lottie-spm" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 40FE0E852A8361DF00252293 /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -6952,48 +6950,6 @@
shellPath = /bin/sh;
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n\"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run\"\n";
};
4A01C38173CBB0A3DAC22027 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SodaLive/Pods-SodaLive-resources.sh\"\n";
showEnvVarsInLog = 0;
};
A693F0C20976651410F54E89 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-SodaLive-dev/Pods-SodaLive-dev-resources.sh\"\n";
showEnvVarsInLog = 0;
};
FAC97E5C197D279B3EE15B05 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -7940,7 +7896,6 @@
70E2CE7366BDBAC59BB39B41 /* AppDeepLinkHandler.swift in Sources */,
2B35B93B2F7253CADBC12A82 /* DateParser.swift in Sources */,
A3BDD0D3E14CD72B022AF6A7 /* FollowButtonImageAsset.swift in Sources */,
C45F071870A4DB48ABAE8BC5 /* YandexAdSupport.swift in Sources */,
FE3244627FFAD8667541CE01 /* ChannelDonationAllView.swift in Sources */,
843C3C5366C9D9DEE37878BF /* ChannelDonationItemView.swift in Sources */,
53E20A90F5D084820C7166E2 /* ChannelDonationViewModel.swift in Sources */,
@@ -8881,7 +8836,6 @@
560889894E241FA549958716 /* AppDeepLinkHandler.swift in Sources */,
4A951EA6E07524A0B650F4BF /* DateParser.swift in Sources */,
F8DB0226F6F44A7DBEF8B4CF /* FollowButtonImageAsset.swift in Sources */,
89AF41E6A46CD84BA469F272 /* YandexAdSupport.swift in Sources */,
E2C133B589E2DA7596B3BAEF /* ChannelDonationAllView.swift in Sources */,
F0F1F71CCA586A0CF5194FAB /* ChannelDonationItemView.swift in Sources */,
0470E68C6F302A131264E3AF /* ChannelDonationViewModel.swift in Sources */,
@@ -9366,7 +9320,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = 959B90DBB4BB5911AB10C442 /* Pods-SodaLive-dev.debug.xcconfig */;
buildSettings = {
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "SodaLive-dev.entitlements";
@@ -9397,6 +9350,7 @@
PRODUCT_BUNDLE_IDENTIFIER = kr.co.vividnext.sodalive.debug2;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
@@ -9407,7 +9361,6 @@
isa = XCBuildConfiguration;
baseConfigurationReference = B108032F3DC7110CBFD04130 /* Pods-SodaLive-dev.release.xcconfig */;
buildSettings = {
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK";
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "SodaLive-dev.entitlements";
@@ -9438,6 +9391,7 @@
PRODUCT_BUNDLE_IDENTIFIER = kr.co.vividnext.sodalive.debug2;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) AUTH_VERIFICATION_MOCK";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
-4
View File
@@ -15,7 +15,6 @@ import FirebaseCore
import FirebaseAnalytics
import FirebaseMessaging
import LineSDK
import YandexMobileAds
class AppDelegate: UIResponder, UIApplicationDelegate {
@@ -33,9 +32,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
Messaging.messaging().delegate = self
setupAppsFlyer()
// YandexAds 초기화
YandexAds.initializeSDK(completionHandler: nil)
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
@@ -36,11 +36,6 @@ struct CharacterView: View {
}
}
YandexInlineBannerView(
placement: .chatCharacterList,
horizontalPadding: 24
)
.padding(.vertical, -24)
// 인기 캐릭터 섹션
if !viewModel.popularCharacters.isEmpty {
@@ -22,10 +22,6 @@ struct OriginalTabView: View {
ScrollView(.vertical, showsIndicators: false) {
VStack(spacing: 12) {
YandexInlineBannerView(
placement: .chatOriginalTabTop,
horizontalPadding: horizontalPadding
)
LazyVGrid(
columns: Array(
@@ -277,21 +277,6 @@ final class ChatRoomViewModel: ObservableObject {
purchaseChatQuota(chargeType: .can, canOption: canOption)
}
func showRewardedAdForChatQuota() {
_Concurrency.Task {
let isShown = await YandexRewardedAdManager.shared.showAdIfAvailable(for: .chatRoomQuota) { [weak self] in
self?.purchaseChatQuota(chargeType: .ad, canOption: nil)
}
if !isShown {
await MainActor.run {
errorMessage = I18n.Chat.Room.rewardedAdLoadFailed
isShowPopup = true
}
}
}
}
private func purchaseChatQuota(
chargeType: ChatRoomQuotaChargeType,
canOption: ChatRoomQuotaCanOption?
@@ -467,15 +452,6 @@ final class ChatRoomViewModel: ObservableObject {
private func updateQuota(totalRemaining: Int) {
self.totalRemaining = totalRemaining
showQuotaNoticeView = totalRemaining <= 0
prepareRewardedAdIfNeeded(totalRemaining: totalRemaining)
}
private func prepareRewardedAdIfNeeded(totalRemaining: Int) {
guard totalRemaining <= 1 else { return }
_Concurrency.Task {
await YandexRewardedAdManager.shared.preloadAd(for: .chatRoomQuota)
}
}
private func getSavedBackgroundImageId() -> Int? {
@@ -21,7 +21,6 @@ struct ChatQuotaPurchaseRequest: Encodable {
enum ChatRoomQuotaChargeType: String, Encodable {
case can = "CAN"
case ad = "AD"
}
enum ChatRoomQuotaCanOption: String, Encodable {
@@ -15,10 +15,6 @@ struct TalkView: View {
BaseView(isLoading: $viewModel.isLoading) {
ScrollView(.vertical, showsIndicators: false) {
LazyVStack(spacing: 24) {
YandexInlineBannerView(
placement: .chatTalkTabTop,
horizontalPadding: 24
)
if viewModel.talkRooms.isEmpty {
Text(I18n.Chat.Talk.emptyMessage)
@@ -1,316 +0,0 @@
//
// YandexAdSupport.swift
// SodaLive
//
// Created by OpenCode on 2026/04/28.
//
import SwiftUI
import YandexMobileAds
enum YandexBannerPlacement {
case liveTab
case liveDetail
case creatorCommunityAll
case seriesMainHome
case seriesMainDayOfWeek
case seriesMainByGenre
case pushNotificationList
case notificationReceiveSettings
case chatCharacterList
case chatOriginalTabTop
case chatTalkTabTop
}
enum YandexRewardedPlacement {
case chatRoomQuota
}
enum YandexAdUnitIdProvider {
static func banner(for placement: YandexBannerPlacement) -> String {
switch placement {
case .liveTab:
YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID
case .liveDetail:
YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID
case .creatorCommunityAll:
YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID
case .seriesMainHome:
YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID
case .seriesMainDayOfWeek:
YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID
case .seriesMainByGenre:
YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID
case .pushNotificationList:
YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID
case .notificationReceiveSettings:
YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID
case .chatCharacterList:
YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID
case .chatOriginalTabTop:
YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID
case .chatTalkTabTop:
YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID
}
}
static func rewarded(for placement: YandexRewardedPlacement) -> String {
switch placement {
case .chatRoomQuota:
YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID
}
}
}
struct YandexInlineBannerView: View {
let placement: YandexBannerPlacement
var maxHeight: CGFloat = 90
var horizontalPadding: CGFloat = 13.3
@State private var bannerHeight: CGFloat = 0
@State private var isLoadFailed = true
var body: some View {
GeometryReader { proxy in
let width = max(proxy.size.width - (horizontalPadding * 2), 1)
let resolvedHeight = isLoadFailed ? 0 : (bannerHeight > 0 ? bannerHeight : maxHeight)
YandexInlineBannerContainer(
placement: placement,
width: width,
maxHeight: maxHeight,
bannerHeight: $bannerHeight,
isLoadFailed: $isLoadFailed
)
.frame(width: width, height: resolvedHeight)
.padding(.horizontal, horizontalPadding)
}
.frame(height: isLoadFailed ? 0 : (bannerHeight > 0 ? bannerHeight : maxHeight))
}
}
private struct YandexInlineBannerContainer: UIViewRepresentable {
let placement: YandexBannerPlacement
let width: CGFloat
let maxHeight: CGFloat
@Binding var bannerHeight: CGFloat
@Binding var isLoadFailed: Bool
func makeCoordinator() -> Coordinator {
Coordinator(parent: self)
}
func makeUIView(context: Context) -> UIView {
let view = UIView()
view.backgroundColor = .clear
return view
}
func updateUIView(_ uiView: UIView, context: Context) {
context.coordinator.parent = self
context.coordinator.configureIfNeeded(containerView: uiView)
}
final class Coordinator: NSObject, BannerAdViewDelegate {
var parent: YandexInlineBannerContainer
private weak var containerView: UIView?
private var bannerAdView: BannerAdView?
private var currentWidth: CGFloat = 0
init(parent: YandexInlineBannerContainer) {
self.parent = parent
}
func configureIfNeeded(containerView: UIView) {
self.containerView = containerView
let roundedWidth = parent.width.rounded(.down)
guard bannerAdView == nil || abs(currentWidth - roundedWidth) > 0.5 else {
return
}
currentWidth = roundedWidth
DispatchQueue.main.async {
self.parent.bannerHeight = 0
self.parent.isLoadFailed = false
}
bannerAdView?.removeFromSuperview()
let adSize = BannerAdSize.inline(width: roundedWidth, maxHeight: parent.maxHeight)
let bannerAdView = BannerAdView(adSize: adSize)
bannerAdView.translatesAutoresizingMaskIntoConstraints = false
bannerAdView.delegate = self
containerView.addSubview(bannerAdView)
NSLayoutConstraint.activate([
bannerAdView.topAnchor.constraint(equalTo: containerView.topAnchor),
bannerAdView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
bannerAdView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
bannerAdView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
])
self.bannerAdView = bannerAdView
bannerAdView.loadAd(with: AdRequest(adUnitID: YandexAdUnitIdProvider.banner(for: parent.placement)))
}
func bannerAdViewDidLoad(_ adView: BannerAdView) {
adView.layoutIfNeeded()
let measuredHeight = adView.bounds.height > 0 ? adView.bounds.height : parent.maxHeight
DispatchQueue.main.async {
self.parent.bannerHeight = measuredHeight
self.parent.isLoadFailed = false
}
}
func bannerAdViewDidFailLoading(_ adView: BannerAdView, error: Error) {
DispatchQueue.main.async {
self.parent.bannerHeight = 0
self.parent.isLoadFailed = true
}
}
func bannerAdViewDidClick(_ adView: BannerAdView) {
}
func bannerAdView(_ adView: BannerAdView, didTrackImpression impressionData: ImpressionData?) {
}
}
}
@MainActor
final class YandexRewardedAdManager: NSObject {
static let shared = YandexRewardedAdManager()
private var rewardedAd: RewardedAd?
private var rewardedAdLoader: RewardedAdLoader?
private var currentPlacement: YandexRewardedPlacement?
private var pendingRewardAction: (@MainActor () -> Void)?
private var rewardedPlacement: YandexRewardedPlacement?
private var isLoading = false
func preloadAd(for placement: YandexRewardedPlacement) {
guard !isLoading else {
return
}
if currentPlacement == placement, rewardedAd != nil {
return
}
let loader = RewardedAdLoader()
rewardedAdLoader = loader
rewardedAd = nil
currentPlacement = placement
isLoading = true
Task {
do {
let loadedAd = try await loader.loadAd(with: AdRequest(adUnitID: YandexAdUnitIdProvider.rewarded(for: placement)))
guard currentPlacement == placement else {
isLoading = false
return
}
loadedAd.delegate = self
rewardedAd = loadedAd
} catch {
if currentPlacement == placement {
rewardedAd = nil
}
}
if currentPlacement == placement {
isLoading = false
}
}
}
func showAdIfAvailable(for placement: YandexRewardedPlacement, onReward: @escaping @MainActor () -> Void) -> Bool {
guard let presenter = presentingViewController(), let rewardedAd, currentPlacement == placement else {
preloadAd(for: placement)
return false
}
pendingRewardAction = onReward
rewardedPlacement = placement
rewardedAd.show(from: presenter)
return true
}
private func completeRewardIfNeeded() {
let action = pendingRewardAction
pendingRewardAction = nil
action?()
}
private func resetAndPreload() {
pendingRewardAction = nil
rewardedAd = nil
if let rewardedPlacement {
self.rewardedPlacement = nil
preloadAd(for: rewardedPlacement)
}
}
private func presentingViewController() -> UIViewController? {
guard
let rootViewController = UIApplication.shared.connectedScenes
.compactMap({ $0 as? UIWindowScene })
.flatMap({ $0.windows })
.first(where: { $0.isKeyWindow })?
.rootViewController
else {
return nil
}
var topViewController = rootViewController
while let presentedViewController = topViewController.presentedViewController {
topViewController = presentedViewController
}
return topViewController
}
}
extension YandexRewardedAdManager: RewardedAdDelegate {
func rewardedAd(_ rewardedAd: RewardedAd, didReward reward: Reward) {
DEBUG_LOG("리워드 광고 보상 받기 성공")
completeRewardIfNeeded()
}
func rewardedAd(_ rewardedAd: RewardedAd, didFailToShow error: Error) {
DEBUG_LOG("리워드 광고 에러")
resetAndPreload()
}
func rewardedAdDidShow(_ rewardedAd: RewardedAd) {
}
func rewardedAdDidDismiss(_ rewardedAd: RewardedAd) {
DEBUG_LOG("리워드 광고 닫기")
resetAndPreload()
}
func rewardedAdDidClick(_ rewardedAd: RewardedAd) {
}
func rewardedAd(_ rewardedAd: RewardedAd, didTrackImpression impressionData: ImpressionData?) {
}
}
@@ -29,9 +29,6 @@ struct SeriesMainByGenreView: View {
let width = (screenSize().width - (horizontalPadding * 2) - gridSpacing) / 2
VStack(spacing: 16) {
if !viewModel.genreList.isEmpty {
YandexInlineBannerView(placement: .seriesMainByGenre, horizontalPadding: 24)
}
LazyVGrid(
columns: Array(
@@ -62,7 +62,6 @@ struct SeriesMainDayOfWeekView: View {
let width = (screenSize().width - (horizontalPadding * 2) - gridSpacing) / 2
VStack(spacing: 16) {
YandexInlineBannerView(placement: .seriesMainDayOfWeek, horizontalPadding: 24)
LazyVGrid(
columns: Array(
@@ -55,7 +55,6 @@ struct SeriesMainHomeView: View {
}
}
YandexInlineBannerView(placement: .seriesMainHome, horizontalPadding: 24)
if !viewModel.recommendSeriesList.isEmpty {
VStack(alignment: .leading, spacing: 16) {
@@ -11,7 +11,6 @@ let BASE_URL = "https://test-api.sodalive.net"
let APPLY_SODALIVE_CREATOR = "https://forms.gle/mmhJKmijjVRnwtdZ7"
let AGORA_APP_ID = "b96574e191a9430fa54c605528aa3ef7"
let AGORA_APP_CERTIFICATE = "ae18ade3afcf4086bd4397726eb0654c"
let BOOTPAY_APP_ID = "6242a7772701800023f68b2f"
let BOOTPAY_APP_HECTO_ID = "667fca5d3bab7404f831c3e5"
@@ -32,18 +31,3 @@ let LINE_CHANNEL_ID = "2008995582"
let AGORA_CUSTOMER_ID = "de5dd9ea151f4a43ba1ad8411817b169"
let AGORA_CUSTOMER_SECRET = "3855da8bc5ae4743af8bf4f87408b515"
let YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID = "R-M-19140297-3"
let YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID = "R-M-19140297-4"
let YANDEX_CONTENT_DETAIL_BANNER_AD_UNIT_ID = "R-M-19140297-5"
let YANDEX_CONTENT_DETAIL_INTERSTITIAL_AD_UNIT_ID = "R-M-19140297-6"
let YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID = "R-M-19140297-7"
let YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID = "R-M-19140297-8"
let YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID = "R-M-19140297-9"
let YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID = "R-M-19140297-10"
let YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID = "R-M-19140297-11"
let YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID = "R-M-19140297-12"
let YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID = "R-M-19140297-13"
let YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19140297-14"
let YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19140297-15"
let YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID = "R-M-19140297-16"
@@ -47,7 +47,6 @@ struct CreatorCommunityAllView: View {
communityViewTypeTabView
YandexInlineBannerView(placement: .creatorCommunityAll)
if isGridMode {
gridContentView
-16
View File
@@ -326,14 +326,6 @@ enum I18n {
pick(ko: "입력 중", en: "Typing", ja: "入力中")
}
static func quotaAdAction(chatCount: Int) -> String {
pick(
ko: "광고 / \(chatCount)채팅",
en: "Ad / \(chatCount) chats",
ja: "広告 / \(chatCount)チャット"
)
}
static func quotaChatCount(_ chatCount: Int) -> String {
pick(
ko: "\(chatCount)채팅",
@@ -342,14 +334,6 @@ enum I18n {
)
}
static var rewardedAdLoadFailed: String {
pick(
ko: "광고를 불러오지 못했어요\n잠시 후 다시 시도해 주세요.",
en: "Could not load the ad.\nPlease try again later.",
ja: "広告を読み込めませんでした。\nしばらくしてからもう一度お試しください。"
)
}
static var backgroundSelectionTitle: String {
pick(ko: "배경 이미지 선택", en: "Select background image", ja: "背景画像を選択")
}
-2
View File
@@ -91,8 +91,6 @@ struct LiveView: View {
SectionLatestFinishedLiveView(items: viewModel.latestFinishedLiveItems)
}
YandexInlineBannerView(placement: .liveTab)
.padding(.vertical, -24)
if viewModel.replayLiveItems.count > 0 {
LiveReplayListView(contentList: viewModel.replayLiveItems)
@@ -129,9 +129,6 @@ struct LiveDetailView: View {
.frame(width: proxy.size.width - 26.7)
}
YandexInlineBannerView(placement: .liveDetail, horizontalPadding: 0)
.frame(width: proxy.size.width - 26.7)
.padding(.top, 13.3)
Rectangle()
.frame(height: 1)
@@ -17,7 +17,6 @@ struct PushNotificationListView: View {
selectedTheme: $viewModel.selectedCategory
)
YandexInlineBannerView(placement: .pushNotificationList)
ScrollView(.vertical, showsIndicators: false) {
LazyVStack(spacing: 0) {
@@ -158,8 +158,6 @@ struct NotificationReceiveSettingsView: View {
.padding(.top, 13.3)
.padding(.horizontal, 13.3)
YandexInlineBannerView(placement: .notificationReceiveSettings)
.padding(.top, 26.7)
Text(I18n.Settings.Notification.followingChannels)
.appFont(size: 16.7, weight: .bold)
-16
View File
@@ -11,7 +11,6 @@ let BASE_URL = "https://api.sodalive.net"
let APPLY_SODALIVE_CREATOR = "https://forms.gle/mmhJKmijjVRnwtdZ7"
let AGORA_APP_ID = "e34e40046e9847baba3adfe2b8ffb4f6"
let AGORA_APP_CERTIFICATE = "15cadeea4ba94ff7b091c9a10f4bf4a6"
let BOOTPAY_APP_ID = "64c35be1d25985001dc50c88"
let BOOTPAY_APP_HECTO_ID = "664c1707b18b225deca4b42a"
@@ -32,18 +31,3 @@ let LINE_CHANNEL_ID = "2008995539"
let AGORA_CUSTOMER_ID = "de5dd9ea151f4a43ba1ad8411817b169"
let AGORA_CUSTOMER_SECRET = "3855da8bc5ae4743af8bf4f87408b515"
let YANDEX_LIVE_TAB_BANNER_AD_UNIT_ID = "R-M-19157621-1"
let YANDEX_LIVE_DETAIL_BANNER_AD_UNIT_ID = "R-M-19157621-2"
let YANDEX_CONTENT_DETAIL_BANNER_AD_UNIT_ID = "R-M-19157621-3"
let YANDEX_CONTENT_DETAIL_INTERSTITIAL_AD_UNIT_ID = "R-M-19157621-4"
let YANDEX_CREATOR_COMMUNITY_ALL_BANNER_AD_UNIT_ID = "R-M-19157621-5"
let YANDEX_SERIES_MAIN_HOME_BANNER_AD_UNIT_ID = "R-M-19157621-6"
let YANDEX_SERIES_MAIN_DAY_OF_WEEK_BANNER_AD_UNIT_ID = "R-M-19157621-7"
let YANDEX_SERIES_MAIN_BY_GENRE_BANNER_AD_UNIT_ID = "R-M-19157621-8"
let YANDEX_PUSH_NOTIFICATION_LIST_BANNER_AD_UNIT_ID = "R-M-19157621-9"
let YANDEX_NOTIFICATION_RECEIVE_SETTINGS_BANNER_AD_UNIT_ID = "R-M-19157621-10"
let YANDEX_CHAT_CHARACTER_LIST_BANNER_AD_UNIT_ID = "R-M-19157621-11"
let YANDEX_CHAT_ORIGINAL_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19157621-12"
let YANDEX_CHAT_TALK_TAB_TOP_BANNER_AD_UNIT_ID = "R-M-19157621-13"
let YANDEX_CHAT_ROOM_QUOTA_REWARDED_AD_UNIT_ID = "R-M-19157621-14"