This commit is contained in:
湖北秦九 2026-01-24 09:05:25 +08:00
parent edd1d7683a
commit 7932c20c65
9 changed files with 865 additions and 9 deletions

View File

@ -41,6 +41,9 @@
031FDEEC2EB35DF600F4CAC7 /* FACoinsPackAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031FDEEB2EB35DF600F4CAC7 /* FACoinsPackAlert.swift */; };
031FDEEE2EB3682000F4CAC7 /* FAVipRetainAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 031FDEED2EB3682000F4CAC7 /* FAVipRetainAlert.swift */; };
035589332F161E6E00FAEF4A /* FAPayRetainAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589322F161E6E00FAEF4A /* FAPayRetainAlert.swift */; };
035589362F2305D800FAEF4A /* FAAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589352F2305D800FAEF4A /* FAAdManager.swift */; };
0355893A2F234B3E00FAEF4A /* FAOpenAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */; };
0355893C2F234C8300FAEF4A /* FATradPlusOpenAd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.swift */; };
039CE6042EAA2621007B5EED /* AppDelegate+FAAdjust.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE6032EAA2612007B5EED /* AppDelegate+FAAdjust.swift */; };
039CE6092EAA2F71007B5EED /* FAAdjustStateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE6082EAA2F62007B5EED /* FAAdjustStateManager.swift */; };
039CE60B2EAA31CB007B5EED /* FAStatAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 039CE60A2EAA31CB007B5EED /* FAStatAPI.swift */; };
@ -416,6 +419,9 @@
031FDEEB2EB35DF600F4CAC7 /* FACoinsPackAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FACoinsPackAlert.swift; sourceTree = "<group>"; };
031FDEED2EB3682000F4CAC7 /* FAVipRetainAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAVipRetainAlert.swift; sourceTree = "<group>"; };
035589322F161E6E00FAEF4A /* FAPayRetainAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAPayRetainAlert.swift; sourceTree = "<group>"; };
035589352F2305D800FAEF4A /* FAAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAAdManager.swift; sourceTree = "<group>"; };
035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAOpenAdManager.swift; sourceTree = "<group>"; };
0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FATradPlusOpenAd.swift; sourceTree = "<group>"; };
039CE6032EAA2612007B5EED /* AppDelegate+FAAdjust.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+FAAdjust.swift"; sourceTree = "<group>"; };
039CE6082EAA2F62007B5EED /* FAAdjustStateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAAdjustStateManager.swift; sourceTree = "<group>"; };
039CE60A2EAA31CB007B5EED /* FAStatAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FAStatAPI.swift; sourceTree = "<group>"; };
@ -777,6 +783,32 @@
path = Alert;
sourceTree = "<group>";
};
035589342F2304B800FAEF4A /* AdManager */ = {
isa = PBXGroup;
children = (
035589382F2319EB00FAEF4A /* Open */,
035589372F2319DD00FAEF4A /* Rewarded */,
035589352F2305D800FAEF4A /* FAAdManager.swift */,
);
path = AdManager;
sourceTree = "<group>";
};
035589372F2319DD00FAEF4A /* Rewarded */ = {
isa = PBXGroup;
children = (
);
path = Rewarded;
sourceTree = "<group>";
};
035589382F2319EB00FAEF4A /* Open */ = {
isa = PBXGroup;
children = (
035589392F234B3E00FAEF4A /* FAOpenAdManager.swift */,
0355893B2F234C8300FAEF4A /* FATradPlusOpenAd.swift */,
);
path = Open;
sourceTree = "<group>";
};
039CE6072EAA2F37007B5EED /* AdjustStateManager */ = {
isa = PBXGroup;
children = (
@ -1302,6 +1334,7 @@
03E23A962EAA1A65004A8CEC /* Libs */ = {
isa = PBXGroup;
children = (
035589342F2304B800FAEF4A /* AdManager */,
03E9A78E2EC1AFEA000D1067 /* ActivityManager */,
031FDEE22EB3487700F4CAC7 /* Alert */,
039CE6122EAB0DE1007B5EED /* FAIap */,
@ -1959,6 +1992,7 @@
F3T938414J234X46539JR019 /* Resources */,
4809W21R638Z15866LWB2041 /* [CP] Embed Pods Frameworks */,
03E9A7632EC19101000D1067 /* Embed Foundation Extensions */,
7A6DD8DBCA1DA3FCAC271812 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -2099,6 +2133,27 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
7A6DD8DBCA1DA3FCAC271812 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Fableon/Pods-Fableon-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9E12479709584PQ64999OJ92 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -2164,6 +2219,7 @@
031FDEB62EB0B77F00F4CAC7 /* FACoinPackConfirmItemView.swift in Sources */,
F35S8138Z362EG3435ME1455 /* CSGleeView.swift in Sources */,
031FDEB42EB0AD7D00F4CAC7 /* FACoinPackConfirmView.swift in Sources */,
035589362F2305D800FAEF4A /* FAAdManager.swift in Sources */,
F31451S3X15B941342J922Q3 /* TConfigCell.swift in Sources */,
F3670DZ2KI89TBO3L9L36P57 /* XLoginView.swift in Sources */,
F3V24670CK2EGR4595CDQ261 /* AWUModalMageCell.swift in Sources */,
@ -2173,6 +2229,7 @@
031FDEE12EB344AB00F4CAC7 /* FALogin+Facebook.swift in Sources */,
F30E153206675C3SJ3974VL1 /* OJQUnechoSectionView.swift in Sources */,
F381909BQ5JWXYI119A49469 /* DREychainCell.swift in Sources */,
0355893A2F234B3E00FAEF4A /* FAOpenAdManager.swift in Sources */,
F39R66F983517825QO331145 /* QCenterEfineView.swift in Sources */,
F3II3AF834346F516W51V693 /* GAMainRecommendedView.swift in Sources */,
031FDEAE2EB093B100F4CAC7 /* FABuyRecordsModel.swift in Sources */,
@ -2388,6 +2445,7 @@
03E239972EAA1A29004A8CEC /* FANetworkManager.swift in Sources */,
03E239982EAA1A29004A8CEC /* UIScrollView+FARefresh.swift in Sources */,
03E239992EAA1A29004A8CEC /* FANavigationController.swift in Sources */,
0355893C2F234C8300FAEF4A /* FATradPlusOpenAd.swift in Sources */,
03E2399A2EAA1A29004A8CEC /* FAViewController.swift in Sources */,
03E2399B2EAA1A29004A8CEC /* FAWebMessageModel.swift in Sources */,
03E2399C2EAA1A29004A8CEC /* FAGradientButton.swift in Sources */,

View File

@ -36,6 +36,7 @@ extension AppDelegate {
func fa_registThirdparty(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) {
ApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
FAAdManager.initSdk()
}
}

View File

@ -25,6 +25,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
FATool.windowScene = windowScene
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
startApp()
onLineTimer = Timer.scheduledTimer(timeInterval: 60 * 10, target: YYTextWeakProxy(target: self), selector: #selector(handleOnLine), userInfo: nil, repeats: true)
@ -38,6 +39,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
requestFirebase()
requestApns()
FAOpenAdManager.manager.showAdIfAvailable()
}
func sceneDidDisconnect(_ scene: UIScene) {

View File

@ -0,0 +1,62 @@
//
// FAAdManager.swift
// Fableon
//
// Created by on 2026/1/23.
//
import UIKit
#if canImport(TradPlusAds)
import TradPlusAds
#endif
class FAAdManager: NSObject {
static func initSdk() {
#if canImport(TradPlusAds)
#if DEBUG
TradPlus.setLogLevel(MSLogLevelAll)
#endif
TradPlus.initSDK("8C768B1A89BA057E47D752181A7BDA21") { error in
if let error = error {
debugLog(error)
} else {
debugLog("TradPlus 初始化成功")
}
}
#endif
}
}
enum FAAdPlatform {
case tradPlus
///广Id
var rewardedUnitId: String {
switch self {
case .tradPlus:
return "E35A9B622C1125CB6EDFC288F22CDB22"
}
}
///广Id
var openUnitId: String {
switch self {
case .tradPlus:
return "67B5E393DF8D80325B0CC1055B5A2122"
}
}
///广Id
var bannerUnitId: String {
switch self {
case .tradPlus:
return "E92BEE12E188BCD15834075F5A32A922"
}
}
}

View File

@ -0,0 +1,221 @@
//
// FAOpenAdManager.swift
// Fableon
//
// Created by on 2026/1/23.
//
import UIKit
@objc protocol FAOpenAdManagerDelegate: NSObjectProtocol {
/// 广
@objc optional func fa_openAdManager(manager: FAOpenAdManager, didLoadFail error: Error)
/// 广
@objc optional func fa_openAdManagerDidLoadFinish(manager: FAOpenAdManager)
/// 广
@objc optional func fa_openAdManager(manager: FAOpenAdManager, didDisplayFail error: Error)
/// 广
@objc optional func fa_openAdManagerDidShow(manager: FAOpenAdManager)
/// 广
@objc optional func fa_openAdManagerDidDismiss(manager: FAOpenAdManager)
///
@objc optional func fa_openAdManager(manager: FAOpenAdManager, didOtherFail error: Error)
}
protocol FAOpenAdDelegate: NSObjectProtocol {
func fa_openAd(ad: FAOpenAd, didLoadFail error: Error)
func fa_openAdDidLoadFinish(ad: FAOpenAd)
func fa_openAd(ad: FAOpenAd, didDisplayFail error: Error)
func fa_openAdDidShow(ad: FAOpenAd)
func fa_openAdDidDismiss(ad: FAOpenAd)
func fa_openAdDidClick(ad: FAOpenAd)
}
protocol FAOpenAd: NSObjectProtocol {
var delegate: FAOpenAdDelegate? { get set }
var adPlatform: FAAdPlatform { get }
var adUnitID: String { get }
var isReady: Bool { get }
func loadAd()
func showAd()
}
class FAOpenAdManager: NSObject {
static let manager = FAOpenAdManager()
weak var delegate: FAOpenAdManagerDelegate?
private var appOpenAd: FAOpenAd? {
didSet {
oldValue?.delegate = nil
appOpenAd?.delegate = self
}
}
private(set) var isLoadingAd = false
private(set) var isShowingAd = false
/// 广
private var isWaitingToShow = false
private var timeOutTimer: Timer?
deinit {
NotificationCenter.default.removeObserver(self)
}
private override init() {
super.init()
NotificationCenter.default.addObserver(self, selector: #selector(didEnterBackgroundNotification), name: UIApplication.didEnterBackgroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification), name: UIApplication.didBecomeActiveNotification, object: nil)
}
func loadAd() {
if isLoadingAd || isAdAvailable() {
return
}
isLoadingAd = true
appOpenAd = FATradPlusOpenAd()
appOpenAd?.loadAd()
}
func showAd() {
guard let ad = appOpenAd, isAdAvailable() else {
loadAd()
return
}
isWaitingToShow = false
isShowingAd = true
ad.showAd()
}
///
func showAdIfAvailable() {
// 广
guard !isShowingAd else { return }
// 1. 广
if isAdAvailable() {
showAd()
return
}
// 2.
isWaitingToShow = true
startTimeoutTimer()
loadAd()
}
private func isAdAvailable() -> Bool {
return appOpenAd?.isReady ?? false
}
// MARK: - Timer (广)
private func startTimeoutTimer() {
clearTimer()
// timeOutTimer = Timer.scheduledTimer(withTimeInterval: 5.0, repeats: false) { [weak self] _ in
// Task { @MainActor in
// self?.handleTimeOut()
// }
// }
}
@objc private func handleTimeOut() {
if isWaitingToShow {
isWaitingToShow = false
let error = NSError(domain: "time-out", code: -1)
delegate?.fa_openAdManager?(manager: self, didOtherFail: error)
}
clearTimer()
}
private func clearTimer() {
timeOutTimer?.invalidate()
timeOutTimer = nil
}
}
// MARK: - BRAppOpenAdDelegate
extension FAOpenAdManager: FAOpenAdDelegate {
func fa_openAd(ad: FAOpenAd, didLoadFail error: Error) {
isLoadingAd = false
isWaitingToShow = false
appOpenAd = nil
clearTimer()
requestStatAd(type: "load_failed", errorMsg: error.localizedDescription)
delegate?.fa_openAdManager?(manager: self, didLoadFail: error)
delegate = nil
}
func fa_openAdDidLoadFinish(ad: FAOpenAd) {
isLoadingAd = false
delegate?.fa_openAdManagerDidLoadFinish?(manager: self)
//
if isWaitingToShow {
clearTimer()
showAd()
}
}
func fa_openAd(ad: FAOpenAd, didDisplayFail error: Error) {
isShowingAd = false
isWaitingToShow = false
appOpenAd = nil
clearTimer()
requestStatAd(type: "show_failed", errorMsg: error.localizedDescription)
delegate?.fa_openAdManager?(manager: self, didDisplayFail: error)
delegate = nil
}
func fa_openAdDidShow(ad: FAOpenAd) {
requestStatAd(type: "start", errorMsg: nil)
delegate?.fa_openAdManagerDidShow?(manager: self)
}
func fa_openAdDidDismiss(ad: FAOpenAd) {
isShowingAd = false
appOpenAd = nil
delegate?.fa_openAdManagerDidDismiss?(manager: self)
//
loadAd()
delegate = nil
}
func fa_openAdDidClick(ad: FAOpenAd) {
requestStatAd(type: "click", errorMsg: nil)
}
}
// MARK: - Statistics
extension FAOpenAdManager {
private func requestStatAd(type: String, errorMsg: String?) {
guard let appOpenAd = appOpenAd else { return }
// let model = SPStatAdModel()
// model.type = type
// model.ads_id = appOpenAd.adUnitID
// model.ad_platform_key = SPAdPlatformKey(rawValue: appOpenAd.adPlatformKey)
// model.error_msg = errorMsg
// model.scene = .splash
//
// SPStatAPI.requestStatAd(model: model)
}
@objc private func didEnterBackgroundNotification() {
if !self.isShowingAd { return }
self.requestStatAd(type: "Interrupt", errorMsg: nil)
}
@objc private func didBecomeActiveNotification() {
showAdIfAvailable()
}
}

View File

@ -0,0 +1,104 @@
//
// BRTradPlusOpenAd.swift
// Fableon
//
// Created by on 2026/1/23.
//
import UIKit
#if canImport(TradPlusAds)
import TradPlusAds
#endif
class FATradPlusOpenAd: NSObject, FAOpenAd {
#if canImport(TradPlusAds)
private var appOpenAd: TradPlusAdSplash?
#endif
weak var delegate: FAOpenAdDelegate?
var adPlatform: FAAdPlatform {
return .tradPlus
}
var adUnitID: String {
return self.adPlatform.openUnitId
}
var isReady: Bool {
#if canImport(TradPlusAds)
return self.appOpenAd?.isAdReady ?? false
#else
return false
#endif
}
func loadAd() {
appOpenAd = nil
guard let targetWindow = FATool.keyWindow else {
let error = NSError(domain: "com.beereel.ad",
code: -2,
userInfo: [NSLocalizedDescriptionKey: "TradPlus failed: No active window found"])
self.delegate?.fa_openAd(ad: self, didLoadFail: error)
return
}
#if canImport(TradPlusAds)
// 3.
let splash = TradPlusAdSplash()
splash.setAdUnitID(adUnitID)
splash.delegate = self
self.appOpenAd = splash
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
splash.loadAd(with: targetWindow, bottomView: nil)
}
#endif
}
func showAd() {
if isReady {
#if canImport(TradPlusAds)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { [weak self] in
guard let self = self else { return }
self.appOpenAd?.show()
}
#endif
}
}
}
#if canImport(TradPlusAds)
// MARK: - TradPlusADSplashDelegate
extension FATradPlusOpenAd: TradPlusADSplashDelegate {
func tpSplashAdLoaded(_ adInfo: [AnyHashable : Any]) {
self.delegate?.fa_openAdDidLoadFinish(ad: self)
}
func tpSplashAdLoadFailWithError(_ error: Error, adInfo: [AnyHashable : Any]) {
self.appOpenAd = nil
self.delegate?.fa_openAd(ad: self, didLoadFail: error)
}
func tpSplashAdImpression(_ adInfo: [AnyHashable : Any]) {
self.delegate?.fa_openAdDidShow(ad: self)
}
func tpSplashAdShow(_ adInfo: [AnyHashable : Any], didFailWithError error: Error) {
self.appOpenAd = nil
self.delegate?.fa_openAd(ad: self, didDisplayFail: error)
}
func tpSplashAdClicked(_ adInfo: [AnyHashable : Any]) {
self.delegate?.fa_openAdDidClick(ad: self)
}
func tpSplashAdDismissed(_ adInfo: [AnyHashable : Any]) {
self.appOpenAd = nil
self.delegate?.fa_openAdDidDismiss(ad: self)
}
}
#endif

View File

@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
@ -21,6 +23,11 @@
</array>
</dict>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>FacebookAppID</key>
<string>1309643747870828</string>
<key>FacebookClientToken</key>
@ -53,5 +60,204 @@
</array>
<key>UIDesignRequiresCompatibility</key>
<true/>
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4fzdc2evr5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>su67r6k2v3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44jx6755aq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>k674qkevps.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbmxgpxpgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>tl55sbb4fm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c3frkrj4fj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>97r2b46745.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
</dict>
</array>
</dict>
</plist>

45
Podfile
View File

@ -1,16 +1,16 @@
platform :ios, '13.0'
platform :ios, '15.0'
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
config.build_settings['EXCLUDED_ARCHITECTURES'] = 'i386'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
end
end
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
config.build_settings.delete('EXCLUDED_ARCHS[sdk=iphonesimulator*]')
config.build_settings.delete('EXCLUDED_ARCHITECTURES')
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
target 'Fableon' do
@ -36,5 +36,34 @@ target 'Fableon' do
pod 'JXPagingView/Paging'
pod 'JXSegmentedView'
pod 'Adjust'
# 广告SDK AdMob Meta Pangle Liftoff Mintegral InMobi Verve Bigo TaurusX UnityAds AppLovin IronSource
pod 'TradPlusAdSDK', '14.9.0'
pod 'TradPlusAdSDK/FacebookAdapter', '14.9.0'
pod 'FBAudienceNetwork','6.20.1'
pod 'TradPlusAdSDK/AdMobAdapter', '14.9.0'
pod 'Google-Mobile-Ads-SDK','12.14.0'
pod 'TradPlusAdSDK/UnityAdapter', '14.9.0'
pod 'UnityAds','4.16.4'
pod 'TradPlusAdSDK/AppLovinAdapter', '14.9.0'
pod 'AppLovinSDK','13.5.0'
pod 'TradPlusAdSDK/VungleAdapter', '14.9.0'
pod 'VungleAds', '7.6.1'
pod 'TradPlusAdSDK/IronSourceAdapter', '14.9.0'
pod 'IronSourceSDK','9.2.0'
pod 'TradPlusAdSDK/InMobiAdapter', '14.9.0'
pod 'InMobiSDK' ,'11.1.0'
pod 'TradPlusAdSDK/MintegralAdapter', '14.9.0'
pod 'MintegralAdSDK' ,'7.7.9'
pod 'MintegralAdSDK/All','7.7.9'
pod 'TradPlusAdSDK/PangleAdapter', '14.9.0'
pod 'Ads-Global', '7.8.0.5'
pod 'TradPlusAdSDK/TPCrossAdapter', '14.9.0'
pod 'TradPlusAdSDK/VerveAdapter', '14.9.0'
pod 'HyBid','3.7.1'
pod 'TradPlusAdSDK/BigoAdapter', '14.9.0'
pod 'BigoADS','5.0.0'
pod 'TradPlusAdSDK/TaurusXAdapter', '14.9.0'
pod 'TaurusxAdsSDK','1.12.0'
end

View File

@ -4,13 +4,47 @@ PODS:
- Adjust/Adjust (5.4.5):
- AdjustSignature (= 3.47.0)
- AdjustSignature (3.47.0)
- Ads-Global (7.8.0.5):
- Ads-Global/BUAdSDK (= 7.8.0.5)
- Ads-Global/BUAdSDK (7.8.0.5):
- Ads-Global/PangleSDK
- Ads-Global/TikTokBusinessSDK
- Ads-Global/PangleSDK (7.8.0.5)
- Ads-Global/TikTokBusinessSDK (7.8.0.5)
- Alamofire (5.10.2)
- AppLovinSDK (13.5.0)
- ATOM-Standalone (3.8.0)
- BigoADS (5.0.0)
- collection-view-layouts/Core (0.2.2)
- collection-view-layouts/TagsLayout (0.2.2):
- collection-view-layouts/Core
- FBAudienceNetwork (6.20.1)
- FDFullscreenPopGesture (1.1)
- FSPagerView (0.8.3)
- Google-Mobile-Ads-SDK (12.14.0):
- GoogleUserMessagingPlatform (>= 1.1)
- GoogleUserMessagingPlatform (3.1.0)
- HWPanModal (0.9.9)
- HyBid (3.7.1):
- HyBid/ATOM (= 3.7.1)
- HyBid/Banner (= 3.7.1)
- HyBid/Core (= 3.7.1)
- HyBid/FullScreen (= 3.7.1)
- HyBid/Native (= 3.7.1)
- HyBid/RewardedVideo (= 3.7.1)
- HyBid/ATOM (3.7.1):
- ATOM-Standalone
- HyBid/Core
- HyBid/Banner (3.7.1):
- HyBid/Core
- HyBid/Core (3.7.1)
- HyBid/FullScreen (3.7.1):
- HyBid/Core
- HyBid/Native (3.7.1):
- HyBid/Core
- HyBid/RewardedVideo (3.7.1):
- HyBid/Core
- InMobiSDK (11.1.0)
- IQKeyboardCore (1.0.8)
- IQKeyboardManagerSwift (8.0.1):
- IQKeyboardManagerSwift/Appearance (= 8.0.1)
@ -49,6 +83,13 @@ PODS:
- IQKeyboardCore
- IQTextView (1.0.5):
- IQKeyboardToolbar/Placeholderable
- IronSourceAdQualitySDK (9.1.1)
- IronSourceSDK (9.2.0.0):
- IronSourceSDK/AdQuality (= 9.2.0.0)
- IronSourceSDK/Ads (= 9.2.0.0)
- IronSourceSDK/AdQuality (9.2.0.0):
- IronSourceAdQualitySDK (~> 9.1.1)
- IronSourceSDK/Ads (9.2.0.0)
- JXPagingView/Paging (2.1.3)
- JXPlayer (0.2.0):
- SJMediaCacheServer (= 2.1.6)
@ -57,6 +98,54 @@ PODS:
- Kingfisher (8.5.0)
- LYEmptyView (1.3.1)
- Masonry (1.1.0)
- MintegralAdSDK (7.7.9):
- MintegralAdSDK/BannerAd (= 7.7.9)
- MintegralAdSDK/BidBannerAd (= 7.7.9)
- MintegralAdSDK/BidInterstitialVideoAd (= 7.7.9)
- MintegralAdSDK/BidNativeAd (= 7.7.9)
- MintegralAdSDK/BidNewInterstitialAd (= 7.7.9)
- MintegralAdSDK/BidRewardVideoAd (= 7.7.9)
- MintegralAdSDK/InterstitialVideoAd (= 7.7.9)
- MintegralAdSDK/NativeAd (= 7.7.9)
- MintegralAdSDK/NewInterstitialAd (= 7.7.9)
- MintegralAdSDK/RewardVideoAd (= 7.7.9)
- MintegralAdSDK/All (7.7.9):
- MintegralAdSDK/BannerAd
- MintegralAdSDK/BidNativeAd
- MintegralAdSDK/InterstitialVideoAd
- MintegralAdSDK/NativeAd
- MintegralAdSDK/NativeAdvancedAd
- MintegralAdSDK/NewInterstitialAd
- MintegralAdSDK/RewardVideoAd
- MintegralAdSDK/SplashAd
- MintegralAdSDK/BannerAd (7.7.9):
- MintegralAdSDK/NativeAd
- MintegralAdSDK/BidBannerAd (7.7.9):
- MintegralAdSDK/BannerAd
- MintegralAdSDK/BidNativeAd
- MintegralAdSDK/BidInterstitialVideoAd (7.7.9):
- MintegralAdSDK/BidNativeAd
- MintegralAdSDK/InterstitialVideoAd
- MintegralAdSDK/BidNativeAd (7.7.9):
- MintegralAdSDK/NativeAd
- MintegralAdSDK/BidNewInterstitialAd (7.7.9):
- MintegralAdSDK/BidNativeAd
- MintegralAdSDK/NewInterstitialAd
- MintegralAdSDK/BidRewardVideoAd (7.7.9):
- MintegralAdSDK/BidNativeAd
- MintegralAdSDK/RewardVideoAd
- MintegralAdSDK/InterstitialVideoAd (7.7.9):
- MintegralAdSDK/NativeAd
- MintegralAdSDK/NativeAd (7.7.9)
- MintegralAdSDK/NativeAdvancedAd (7.7.9):
- MintegralAdSDK/NativeAd
- MintegralAdSDK/NewInterstitialAd (7.7.9):
- MintegralAdSDK/InterstitialVideoAd
- MintegralAdSDK/NativeAd
- MintegralAdSDK/RewardVideoAd (7.7.9):
- MintegralAdSDK/NativeAd
- MintegralAdSDK/SplashAd (7.7.9):
- MintegralAdSDK/NativeAd
- MJRefresh (3.7.9)
- SJBaseVideoPlayer (3.7.7.1):
- Masonry
@ -129,7 +218,30 @@ PODS:
- SVProgressHUD (2.3.1):
- SVProgressHUD/Core (= 2.3.1)
- SVProgressHUD/Core (2.3.1)
- TaurusxAdsSDK (1.12.0):
- TaurusxAdsSDK/TaurusxAds (= 1.12.0)
- TaurusxAdsSDK/TaurusxAds (1.12.0)
- Toast (4.1.1)
- TPExchange (13.8.30)
- TradPlusAdSDK (14.9.0):
- TradPlusAdSDK/TradPlusAds (= 14.9.0)
- TradPlusAdSDK/AdMobAdapter (14.9.0)
- TradPlusAdSDK/AppLovinAdapter (14.9.0)
- TradPlusAdSDK/BigoAdapter (14.9.0)
- TradPlusAdSDK/FacebookAdapter (14.9.0)
- TradPlusAdSDK/InMobiAdapter (14.9.0)
- TradPlusAdSDK/IronSourceAdapter (14.9.0)
- TradPlusAdSDK/MintegralAdapter (14.9.0)
- TradPlusAdSDK/PangleAdapter (14.9.0)
- TradPlusAdSDK/TaurusXAdapter (14.9.0)
- TradPlusAdSDK/TPCrossAdapter (14.9.0)
- TradPlusAdSDK/TradPlusAds (14.9.0):
- TPExchange (= 13.8.30)
- TradPlusAdSDK/UnityAdapter (14.9.0)
- TradPlusAdSDK/VerveAdapter (14.9.0)
- TradPlusAdSDK/VungleAdapter (14.9.0)
- UnityAds (4.16.4)
- VungleAds (7.6.1)
- YYCategories (1.0.4):
- YYCategories/no-arc (= 1.0.4)
- YYCategories/no-arc (1.0.4)
@ -141,22 +253,49 @@ PODS:
DEPENDENCIES:
- Adjust
- Ads-Global (= 7.8.0.5)
- Alamofire
- AppLovinSDK (= 13.5.0)
- BigoADS (= 5.0.0)
- collection-view-layouts/TagsLayout
- FBAudienceNetwork (= 6.20.1)
- FDFullscreenPopGesture
- FSPagerView
- Google-Mobile-Ads-SDK (= 12.14.0)
- HWPanModal
- HyBid (= 3.7.1)
- InMobiSDK (= 11.1.0)
- IQKeyboardManagerSwift
- IronSourceSDK (= 9.2.0)
- JXPagingView/Paging
- JXPlayer (from `https://github.com/zengjuexin/JXPlayer.git`, tag `0.2.0`)
- JXSegmentedView
- Kingfisher
- LYEmptyView
- MintegralAdSDK (= 7.7.9)
- MintegralAdSDK/All (= 7.7.9)
- MJRefresh
- SmartCodable
- SnapKit
- SVProgressHUD
- TaurusxAdsSDK (= 1.12.0)
- Toast
- TradPlusAdSDK (= 14.9.0)
- TradPlusAdSDK/AdMobAdapter (= 14.9.0)
- TradPlusAdSDK/AppLovinAdapter (= 14.9.0)
- TradPlusAdSDK/BigoAdapter (= 14.9.0)
- TradPlusAdSDK/FacebookAdapter (= 14.9.0)
- TradPlusAdSDK/InMobiAdapter (= 14.9.0)
- TradPlusAdSDK/IronSourceAdapter (= 14.9.0)
- TradPlusAdSDK/MintegralAdapter (= 14.9.0)
- TradPlusAdSDK/PangleAdapter (= 14.9.0)
- TradPlusAdSDK/TaurusXAdapter (= 14.9.0)
- TradPlusAdSDK/TPCrossAdapter (= 14.9.0)
- TradPlusAdSDK/UnityAdapter (= 14.9.0)
- TradPlusAdSDK/VerveAdapter (= 14.9.0)
- TradPlusAdSDK/VungleAdapter (= 14.9.0)
- UnityAds (= 4.16.4)
- VungleAds (= 7.6.1)
- YYCategories
- YYText
- ZLPhotoBrowser
@ -165,11 +304,20 @@ SPEC REPOS:
https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git:
- Adjust
- AdjustSignature
- Ads-Global
- Alamofire
- AppLovinSDK
- ATOM-Standalone
- BigoADS
- collection-view-layouts
- FBAudienceNetwork
- FDFullscreenPopGesture
- FSPagerView
- Google-Mobile-Ads-SDK
- GoogleUserMessagingPlatform
- HWPanModal
- HyBid
- InMobiSDK
- IQKeyboardCore
- IQKeyboardManagerSwift
- IQKeyboardNotification
@ -178,11 +326,14 @@ SPEC REPOS:
- IQKeyboardToolbarManager
- IQTextInputViewNotification
- IQTextView
- IronSourceAdQualitySDK
- IronSourceSDK
- JXPagingView
- JXSegmentedView
- Kingfisher
- LYEmptyView
- Masonry
- MintegralAdSDK
- MJRefresh
- SJBaseVideoPlayer
- SJMediaCacheServer
@ -191,7 +342,12 @@ SPEC REPOS:
- SmartCodable
- SnapKit
- SVProgressHUD
- TaurusxAdsSDK
- Toast
- TPExchange
- TradPlusAdSDK
- UnityAds
- VungleAds
- YYCategories
- YYModel
- YYText
@ -210,11 +366,20 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
Adjust: 010c8b2b582add6ba200469c82c4d8c9e5ddb198
AdjustSignature: d634fc6b66295c38807f3b4e50978c1f72355950
Ads-Global: f4958eaa8e92b32a05fab125fed7822be81cf878
Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
AppLovinSDK: bf8974163120910e6b902e9610e7c5a2c0f577b6
ATOM-Standalone: ad17f0d0e60b22f67ed99e5a336425d68d324f3e
BigoADS: 789ca51394adb1adb405e7e01ec8e43d3dc14f15
collection-view-layouts: 474ec4cce601a26247737227a97fa6a4eb30213f
FBAudienceNetwork: 08e86d63a05b3a5a59414af12e4af8d756943c80
FDFullscreenPopGesture: a8a620179e3d9c40e8e00256dcee1c1a27c6d0f0
FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8
Google-Mobile-Ads-SDK: 4534fd2dfcd3f705c5485a6633c5188d03d4eed2
GoogleUserMessagingPlatform: befe603da6501006420c206222acd449bba45a9c
HWPanModal: b57a6717d3cdcd666bff44f9dd2a5be9f4d6f5d2
HyBid: c75fa40e2d209aaed25b60f7bcd0e408d294c19e
InMobiSDK: 43b1d6560bd75c8c382bb54fa8e248f5ed979860
IQKeyboardCore: 8652977ec919cf5351aa2977fedd1a6546476fbc
IQKeyboardManagerSwift: 835fc9c6e4732398113406d84900ad2e8f141218
IQKeyboardNotification: eb4910401f5a0e68f97e71c62f8a0c5b7e9d535c
@ -223,12 +388,15 @@ SPEC CHECKSUMS:
IQKeyboardToolbarManager: c8a575e8b5fffe5873d0e75312244498a0759473
IQTextInputViewNotification: 3b9fb27a16e7ee8958cc9092cfb07a1a9e1fd559
IQTextView: ae13b4922f22e6f027f62c557d9f4f236b19d5c7
IronSourceAdQualitySDK: 56314ade811a5226f76dfd377bc09aca0d6610c0
IronSourceSDK: 66e1483cd62fb63162a965651f6f41c6b91664db
JXPagingView: afdd2e9af09c90160dd232b970d603cc6e7ddd0e
JXPlayer: 3064f658b71cba7f0db4098e618f11f5d8dce61a
JXSegmentedView: cd73555ce2134d1656db2cb383ba9c2f36fb5078
Kingfisher: ff0d31a1f07bdff6a1ebb3ba08b8e6e567b6500c
LYEmptyView: b6d418cfa38b78df0cf243f9a9c25ccbdc399922
Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
MintegralAdSDK: 054814f99bb7e967b8974fe635d9005b225cbe42
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
SJBaseVideoPlayer: b3122de12225b27b71bd9a8a1f08f4dcf2f4e5ec
SJMediaCacheServer: f6cd08ff32f5c6fc18ff06e676b42d6c17ce4cf1
@ -237,12 +405,17 @@ SPEC CHECKSUMS:
SmartCodable: 545dd052990fe7e80085463b79a1a5e462ee29ff
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
TaurusxAdsSDK: 6eed5ca3a64dcaeea3929bd483c7073fd7cf0628
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
TPExchange: 41f39ebc014788b277bc78030f6ef2585a5c4460
TradPlusAdSDK: 980b0feda31e25e1b8ec0f6481d43d7f2be1b39a
UnityAds: 91a5d786c1e79fcbf702c525af4700158aeb36c8
VungleAds: ab78d62721933672a83efcf7d2de8ae0610494be
YYCategories: 6bcd4314c6661a561410dce4a793379ebd306abd
YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
YYText: 5c461d709e24d55a182d1441c41dc639a18a4849
ZLPhotoBrowser: d5928f08485c90a0b349a3a1e804e82c83ccf193
PODFILE CHECKSUM: cd32c414c77ca06ddc270e513eb703e621fcdcff
PODFILE CHECKSUM: cbaf80f809461e9694f391ef939aeca544e90607
COCOAPODS: 1.16.2