first commit
This commit is contained in:
commit
ff5e105937
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
|
Pods/
|
||||||
|
build/
|
||||||
51
build.py
Normal file
51
build.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
def build_json(json_path):
|
||||||
|
with open(json_path, 'r') as f:
|
||||||
|
config = json.loads(f.read())
|
||||||
|
t = config["type"]
|
||||||
|
if t == "max":
|
||||||
|
build_max(json_path)
|
||||||
|
else:
|
||||||
|
build_topon(json_path)
|
||||||
|
|
||||||
|
def build_max(json_path):
|
||||||
|
build_path = "/Users/mac/codes/ios/empty_topon/max"
|
||||||
|
build_script(build_path, json_path, "playb-max.ipa")
|
||||||
|
|
||||||
|
|
||||||
|
def build_topon(json_path):
|
||||||
|
build_path = "/Users/mac/codes/ios/empty_topon/topon"
|
||||||
|
build_script(build_path, json_path, "playb-topon.ipa")
|
||||||
|
|
||||||
|
def build_script(build_path, json_path, ipa_name):
|
||||||
|
cmd = """
|
||||||
|
cd {0}
|
||||||
|
python build.py {1}
|
||||||
|
""".format(build_path, json_path)
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
src_ipa = os.path.join(build_path,"build/ipas", ipa_name)
|
||||||
|
target_path = os.path.dirname(json_path)
|
||||||
|
cmd = """
|
||||||
|
cp -fv {0} {1}
|
||||||
|
""".format(src_ipa, target_path)
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
def build(base_path):
|
||||||
|
print(base_path)
|
||||||
|
for root, dirs, files in os.walk(base_path):
|
||||||
|
for file in files:
|
||||||
|
full_path = os.path.join(root, file)
|
||||||
|
name = os.path.basename(full_path)
|
||||||
|
if name == 'build.json':
|
||||||
|
build_json(full_path)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
build(sys.argv[1])
|
||||||
23
install_all.py
Normal file
23
install_all.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def install_path(path, type):
|
||||||
|
cmd = """
|
||||||
|
sshpass -p alpine pscp -l root -A -h ./ips.txt {0} /User/Downloads
|
||||||
|
sshpass -p alpine pssh -l root -A -ih ./ips.txt "appinst /User/Downloads/playb-{1}.ipa"
|
||||||
|
""".format(path, type)
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
def install_all():
|
||||||
|
for root, dirs, files in os.walk("/Users/mac/codes/ios/empty_topon/ipas/lux"):
|
||||||
|
for file in files:
|
||||||
|
full_path:str = os.path.join(root, file)
|
||||||
|
if full_path.endswith("max.ipa"):
|
||||||
|
install_path(full_path, "max")
|
||||||
|
elif full_path.endswith("topon.ipa"):
|
||||||
|
install_path(full_path, "topon")
|
||||||
|
|
||||||
|
|
||||||
|
install_all()
|
||||||
|
|
||||||
116
max/build.py
Normal file
116
max/build.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def build(ad_key, ad_ids, app_display_name,app_bundle_id,app_version,app_icon):
|
||||||
|
|
||||||
|
cmd = """
|
||||||
|
rm -rfv build
|
||||||
|
mkdir build
|
||||||
|
cp -rfv template/playbtest ./build/
|
||||||
|
"""
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
# 创建编译目录复制模版到build目录
|
||||||
|
|
||||||
|
print("--------------------")
|
||||||
|
# 读取配置
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### 复制icon
|
||||||
|
|
||||||
|
cmd = f"""
|
||||||
|
cp -fv {app_icon} ./build/playbtest/playbtest/Assets.xcassets/AppIcon.appiconset/1024x1024.png
|
||||||
|
"""
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
## 修改ad信息
|
||||||
|
print("修改ad信息")
|
||||||
|
code_path = './build/playbtest/playbtest/playB/bbbAdManager.swift'
|
||||||
|
with open(code_path, 'r') as f:
|
||||||
|
code = f.read()
|
||||||
|
code = code.replace("{adKey}", ad_key)
|
||||||
|
code = code.replace("{allAdIds}", '"' + "\",\"".join(ad_ids) + '"')
|
||||||
|
with open(code_path, 'w') as f:
|
||||||
|
f.write(code)
|
||||||
|
|
||||||
|
print("修改项目信息")
|
||||||
|
prj_path = "./build/playbtest/playbtest.xcodeproj/project.pbxproj"
|
||||||
|
with open(prj_path, 'r') as f:
|
||||||
|
code = f.read()
|
||||||
|
code = code.replace("{DisplayName}", app_display_name)
|
||||||
|
code = code.replace("{BundleId}", app_bundle_id)
|
||||||
|
code = code.replace("{Version}", app_version)
|
||||||
|
with open(prj_path, 'w') as f:
|
||||||
|
f.write(code)
|
||||||
|
|
||||||
|
print("\n开始编译\n")
|
||||||
|
cmd = """
|
||||||
|
cd ./build/playbtest
|
||||||
|
pod install --repo-update
|
||||||
|
xcodebuild clean build -workspace playbtest.xcworkspace -configuration Release -scheme playbtest -derivedDataPath "../Target" -destination "platform=iOS,id=00008110-000815AE1179801E"
|
||||||
|
cd ../../
|
||||||
|
"""
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
print("\n开始打包\n")
|
||||||
|
|
||||||
|
# codesign --entitlements ./template/Filza.entitlements -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" ./build/ipas/playbtest.app
|
||||||
|
# find "./build/ipas/playbtest.app" -name "*.framework" -exec codesign -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" {} \;
|
||||||
|
# find "./build/ipas/playbtest.app" -name "*.dylib" -exec codesign -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" {} \;
|
||||||
|
# cp ./template/embedded.mobileprovision ./build/ipas/playbtest.app/embedded.mobileprovision
|
||||||
|
# codesign --entitlements ./template/Filza.entitlements -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" ./build/ipas/playbtest.app
|
||||||
|
cmd = """
|
||||||
|
mkdir ./build/ipas
|
||||||
|
cp -rf ./build/Target/Build/Products/Release-iphoneos/playbtest.app ./build/ipas/
|
||||||
|
|
||||||
|
find "./build/ipas/playbtest.app" -name "*.framework" -exec codesign -f -s "Apple Distribution: Haiyang Tang (544LFS79WN)" {} \;
|
||||||
|
find "./build/ipas/playbtest.app" -name "*.dylib" -exec codesign -f -s "Apple Distribution: Haiyang Tang (544LFS79WN)" {} \;
|
||||||
|
cp ./template/embedded.mobileprovision ./build/ipas/playbtest.app/embedded.mobileprovision
|
||||||
|
echo "codesign"
|
||||||
|
codesign --entitlements ./template/Filza.entitlements -f -s "Apple Distribution: Haiyang Tang (544LFS79WN)" ./build/ipas/playbtest.app
|
||||||
|
|
||||||
|
mkdir ./build/ipas/Payload
|
||||||
|
mv ./build/ipas/playbtest.app ./build/ipas/Payload
|
||||||
|
cd ./build/ipas
|
||||||
|
zip -r playb-max.ipa Payload/
|
||||||
|
"""
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app_icon = "/Users/mac/codes/ios/empty_topon/ipas/lux/SpeedyColor/appicon.png"
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
ad_key = "Dd37BrtbLDlaeiDhxVzaDbsI67Mc1h5lAGIinzo4v2IbkpufdtVmT5Tag9O3aGexzkS4txEPigaEexktewANIk"
|
||||||
|
ad_ids = ["7468dbe129ab2afe","7b61678bf643a84a","c6b7477edc2aff7e","28fd7967e71c9203"]
|
||||||
|
app_display_name = "TimeCompass:Zones"
|
||||||
|
app_bundle_id = "com.timeCompass.timeCompassZones"
|
||||||
|
app_version = "1.1"
|
||||||
|
|
||||||
|
build(ad_key, ad_ids, app_display_name, app_bundle_id, app_version, app_icon)
|
||||||
|
else:
|
||||||
|
json_path = sys.argv[1]
|
||||||
|
with open(json_path, 'r') as f:
|
||||||
|
config = json.loads(f.read())
|
||||||
|
|
||||||
|
print(config)
|
||||||
|
|
||||||
|
ad_key = config["sdk_key"]
|
||||||
|
ad_ids = config["ad_ids"]
|
||||||
|
app_display_name = config["app_name"]
|
||||||
|
app_bundle_id = config["app_pkg_name"]
|
||||||
|
app_version = config["app_ver"]
|
||||||
|
app_icon_tmp:str = config["app_icon"]
|
||||||
|
if not app_icon_tmp is None and app_icon_tmp.strip() != '':
|
||||||
|
app_icon = os.path.join(os.path.dirname(json_path), app_icon_tmp)
|
||||||
|
|
||||||
|
build(ad_key, ad_ids, app_display_name, app_bundle_id, app_version, app_icon)
|
||||||
|
|
||||||
|
|
||||||
26
max/template/Filza.entitlements
Normal file
26
max/template/Filza.entitlements
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>application-identifier</key>
|
||||||
|
<string>544LFS79WN.com.keycraft.keyCraft</string>
|
||||||
|
<key>aps-environment</key>
|
||||||
|
<string>production</string>
|
||||||
|
<key>com.apple.developer.associated-domains</key>
|
||||||
|
<string>*</string>
|
||||||
|
<key>com.apple.developer.team-identifier</key>
|
||||||
|
<string>544LFS79WN</string>
|
||||||
|
<key>com.apple.security.application-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>group.com.keycraft.keyCraft.appshortcallid</string>
|
||||||
|
<string>group.com.keycraft.keyCraft.appcallid</string>
|
||||||
|
</array>
|
||||||
|
<key>get-task-allow</key>
|
||||||
|
<true/>
|
||||||
|
<key>keychain-access-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>544LFS79WN.*</string>
|
||||||
|
<string>com.apple.token</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
max/template/embedded.mobileprovision
Normal file
BIN
max/template/embedded.mobileprovision
Normal file
Binary file not shown.
19
max/template/playbtest/Podfile
Normal file
19
max/template/playbtest/Podfile
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Uncomment the next line to define a global platform for your project
|
||||||
|
# platform :ios, '9.0'
|
||||||
|
|
||||||
|
target 'playbtest' do
|
||||||
|
# Comment the next line if you don't want to use dynamic frameworks
|
||||||
|
use_frameworks!
|
||||||
|
|
||||||
|
# Pods for playbtest
|
||||||
|
|
||||||
|
pod 'AppLovinSDK','13.3.1'
|
||||||
|
pod 'AppLovinDSPLinkedInAdapter'
|
||||||
|
pod 'AppLovinMediationVungleAdapter'
|
||||||
|
pod 'AppLovinMediationMintegralAdapter'
|
||||||
|
|
||||||
|
# pod 'Firebase/Core'
|
||||||
|
# pod 'Firebase/AnalyticsWithoutAdIdSupport'
|
||||||
|
# pod 'FirebaseRemoteConfig'
|
||||||
|
|
||||||
|
end
|
||||||
604
max/template/playbtest/playbtest.xcodeproj/project.pbxproj
Normal file
604
max/template/playbtest/playbtest.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,604 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 56;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
046535802D802D9900B2D19B /* bbbAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0465357F2D802D9900B2D19B /* bbbAdManager.swift */; };
|
||||||
|
048D61A22D67204900FDE496 /* XUDPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 048D61A12D67204900FDE496 /* XUDPClient.m */; };
|
||||||
|
048D61A32D67204900FDE496 /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 048D619E2D67204900FDE496 /* GCDAsyncUdpSocket.m */; };
|
||||||
|
04C0D91E2D83D5030012DDF5 /* MyTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04C0D91D2D83D5030012DDF5 /* MyTableViewCell.swift */; };
|
||||||
|
751A9FFB2CE1E31700BFC689 /* closeWindows.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751A9FFA2CE1E31700BFC689 /* closeWindows.swift */; };
|
||||||
|
7577E56C2CDA085400B7EDBF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7577E56B2CDA085400B7EDBF /* AppDelegate.swift */; };
|
||||||
|
7577E5702CDA085400B7EDBF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7577E56F2CDA085400B7EDBF /* ViewController.swift */; };
|
||||||
|
7577E5732CDA085400B7EDBF /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 7577E5722CDA085400B7EDBF /* Base */; };
|
||||||
|
7577E5752CDA085900B7EDBF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7577E5742CDA085900B7EDBF /* Assets.xcassets */; };
|
||||||
|
7577E5782CDA085900B7EDBF /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 7577E5772CDA085900B7EDBF /* Base */; };
|
||||||
|
7577E5892CDA135500B7EDBF /* YL_PlayVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7577E5872CDA135500B7EDBF /* YL_PlayVC.swift */; };
|
||||||
|
7577E58A2CDA135500B7EDBF /* YL_PlayVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7577E5882CDA135500B7EDBF /* YL_PlayVC.xib */; };
|
||||||
|
75B9949E2D23A4DC0046561D /* getIphone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B9949D2D23A4DC0046561D /* getIphone.swift */; };
|
||||||
|
75B994A02D23AED00046561D /* idfa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75B9949F2D23AED00046561D /* idfa.swift */; };
|
||||||
|
75E053D22CDB060E0097DA69 /* YL_NetWorkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E053D12CDB060E0097DA69 /* YL_NetWorkManager.swift */; };
|
||||||
|
75E053D62CDB07F00097DA69 /* closeAD.m in Sources */ = {isa = PBXBuildFile; fileRef = 75E053D52CDB07F00097DA69 /* closeAD.m */; };
|
||||||
|
97D9032452C29760C7B26B57 /* Pods_playbtest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED1D072A2AFA6387E393A835 /* Pods_playbtest.framework */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
044C8D012E0CECA500625F9A /* Embed Libraries */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
name = "Embed Libraries";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
0465357F2D802D9900B2D19B /* bbbAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bbbAdManager.swift; sourceTree = "<group>"; };
|
||||||
|
048D619C2D67204900FDE496 /* CocoaAsyncSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaAsyncSocket.h; sourceTree = "<group>"; };
|
||||||
|
048D619D2D67204900FDE496 /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCDAsyncUdpSocket.h; sourceTree = "<group>"; };
|
||||||
|
048D619E2D67204900FDE496 /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncUdpSocket.m; sourceTree = "<group>"; };
|
||||||
|
048D61A02D67204900FDE496 /* XUDPClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XUDPClient.h; sourceTree = "<group>"; };
|
||||||
|
048D61A12D67204900FDE496 /* XUDPClient.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XUDPClient.m; sourceTree = "<group>"; };
|
||||||
|
04C0D91D2D83D5030012DDF5 /* MyTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyTableViewCell.swift; sourceTree = "<group>"; };
|
||||||
|
365725DAEE7A265FA302BB10 /* Pods-playbtest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-playbtest.release.xcconfig"; path = "Target Support Files/Pods-playbtest/Pods-playbtest.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
751A9FFA2CE1E31700BFC689 /* closeWindows.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = closeWindows.swift; sourceTree = "<group>"; };
|
||||||
|
7577E5682CDA085400B7EDBF /* playbtest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = playbtest.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
7577E56B2CDA085400B7EDBF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
7577E56F2CDA085400B7EDBF /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||||
|
7577E5722CDA085400B7EDBF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
|
7577E5742CDA085900B7EDBF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
7577E5772CDA085900B7EDBF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
|
7577E5792CDA085900B7EDBF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
7577E5872CDA135500B7EDBF /* YL_PlayVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YL_PlayVC.swift; sourceTree = "<group>"; };
|
||||||
|
7577E5882CDA135500B7EDBF /* YL_PlayVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = YL_PlayVC.xib; sourceTree = "<group>"; };
|
||||||
|
75B9949D2D23A4DC0046561D /* getIphone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = getIphone.swift; sourceTree = "<group>"; };
|
||||||
|
75B9949F2D23AED00046561D /* idfa.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = idfa.swift; sourceTree = "<group>"; };
|
||||||
|
75E053D12CDB060E0097DA69 /* YL_NetWorkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YL_NetWorkManager.swift; sourceTree = "<group>"; };
|
||||||
|
75E053D32CDB07F00097DA69 /* playbtest-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "playbtest-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
|
75E053D42CDB07F00097DA69 /* closeAD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = closeAD.h; sourceTree = "<group>"; };
|
||||||
|
75E053D52CDB07F00097DA69 /* closeAD.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = closeAD.m; sourceTree = "<group>"; };
|
||||||
|
75E053D72CDB0D1D0097DA69 /* playb.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = playb.pch; sourceTree = "<group>"; };
|
||||||
|
AE60AC68993A5FDD50BCF762 /* Pods-playbtest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-playbtest.debug.xcconfig"; path = "Target Support Files/Pods-playbtest/Pods-playbtest.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
ED1D072A2AFA6387E393A835 /* Pods_playbtest.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_playbtest.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
7577E5652CDA085400B7EDBF /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
97D9032452C29760C7B26B57 /* Pods_playbtest.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
048D619F2D67204900FDE496 /* GCD */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
048D619D2D67204900FDE496 /* GCDAsyncUdpSocket.h */,
|
||||||
|
048D619E2D67204900FDE496 /* GCDAsyncUdpSocket.m */,
|
||||||
|
);
|
||||||
|
path = GCD;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
157CA50DD7C7A6B816F415DB /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
ED1D072A2AFA6387E393A835 /* Pods_playbtest.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7577E55F2CDA085400B7EDBF = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
7577E56A2CDA085400B7EDBF /* playbtest */,
|
||||||
|
7577E5692CDA085400B7EDBF /* Products */,
|
||||||
|
7D7F1D418E852DCC300E917E /* Pods */,
|
||||||
|
157CA50DD7C7A6B816F415DB /* Frameworks */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7577E5692CDA085400B7EDBF /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
7577E5682CDA085400B7EDBF /* playbtest.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7577E56A2CDA085400B7EDBF /* playbtest */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
7577E5812CDA0B0800B7EDBF /* PlayB */,
|
||||||
|
7577E56B2CDA085400B7EDBF /* AppDelegate.swift */,
|
||||||
|
7577E56F2CDA085400B7EDBF /* ViewController.swift */,
|
||||||
|
7577E5712CDA085400B7EDBF /* Main.storyboard */,
|
||||||
|
7577E5742CDA085900B7EDBF /* Assets.xcassets */,
|
||||||
|
7577E5762CDA085900B7EDBF /* LaunchScreen.storyboard */,
|
||||||
|
7577E5792CDA085900B7EDBF /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = playbtest;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7577E5812CDA0B0800B7EDBF /* PlayB */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
048D619C2D67204900FDE496 /* CocoaAsyncSocket.h */,
|
||||||
|
048D619F2D67204900FDE496 /* GCD */,
|
||||||
|
048D61A02D67204900FDE496 /* XUDPClient.h */,
|
||||||
|
048D61A12D67204900FDE496 /* XUDPClient.m */,
|
||||||
|
75E053D12CDB060E0097DA69 /* YL_NetWorkManager.swift */,
|
||||||
|
7577E5872CDA135500B7EDBF /* YL_PlayVC.swift */,
|
||||||
|
7577E5882CDA135500B7EDBF /* YL_PlayVC.xib */,
|
||||||
|
75E053D42CDB07F00097DA69 /* closeAD.h */,
|
||||||
|
75E053D52CDB07F00097DA69 /* closeAD.m */,
|
||||||
|
75E053D32CDB07F00097DA69 /* playbtest-Bridging-Header.h */,
|
||||||
|
75E053D72CDB0D1D0097DA69 /* playb.pch */,
|
||||||
|
751A9FFA2CE1E31700BFC689 /* closeWindows.swift */,
|
||||||
|
75B9949D2D23A4DC0046561D /* getIphone.swift */,
|
||||||
|
75B9949F2D23AED00046561D /* idfa.swift */,
|
||||||
|
0465357F2D802D9900B2D19B /* bbbAdManager.swift */,
|
||||||
|
04C0D91D2D83D5030012DDF5 /* MyTableViewCell.swift */,
|
||||||
|
);
|
||||||
|
path = PlayB;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7D7F1D418E852DCC300E917E /* Pods */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
AE60AC68993A5FDD50BCF762 /* Pods-playbtest.debug.xcconfig */,
|
||||||
|
365725DAEE7A265FA302BB10 /* Pods-playbtest.release.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Pods;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
7577E5672CDA085400B7EDBF /* playbtest */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 7577E57C2CDA085900B7EDBF /* Build configuration list for PBXNativeTarget "playbtest" */;
|
||||||
|
buildPhases = (
|
||||||
|
8F58E6E75C52EB4FEEF2490F /* [CP] Check Pods Manifest.lock */,
|
||||||
|
7577E5642CDA085400B7EDBF /* Sources */,
|
||||||
|
7577E5652CDA085400B7EDBF /* Frameworks */,
|
||||||
|
7577E5662CDA085400B7EDBF /* Resources */,
|
||||||
|
6E50B8AEC76C920BE22FC478 /* [CP] Embed Pods Frameworks */,
|
||||||
|
9E8498E018A09B2E436F82F6 /* [CP] Copy Pods Resources */,
|
||||||
|
044C8D012E0CECA500625F9A /* Embed Libraries */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = playbtest;
|
||||||
|
productName = playbtest;
|
||||||
|
productReference = 7577E5682CDA085400B7EDBF /* playbtest.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
7577E5602CDA085400B7EDBF /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
BuildIndependentTargetsInParallel = 1;
|
||||||
|
LastSwiftUpdateCheck = 1530;
|
||||||
|
LastUpgradeCheck = 1530;
|
||||||
|
TargetAttributes = {
|
||||||
|
7577E5672CDA085400B7EDBF = {
|
||||||
|
CreatedOnToolsVersion = 15.3;
|
||||||
|
LastSwiftMigration = 1530;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 7577E5632CDA085400B7EDBF /* Build configuration list for PBXProject "playbtest" */;
|
||||||
|
compatibilityVersion = "Xcode 14.0";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 7577E55F2CDA085400B7EDBF;
|
||||||
|
productRefGroup = 7577E5692CDA085400B7EDBF /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
7577E5672CDA085400B7EDBF /* playbtest */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
7577E5662CDA085400B7EDBF /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
7577E5752CDA085900B7EDBF /* Assets.xcassets in Resources */,
|
||||||
|
7577E58A2CDA135500B7EDBF /* YL_PlayVC.xib in Resources */,
|
||||||
|
7577E5782CDA085900B7EDBF /* Base in Resources */,
|
||||||
|
7577E5732CDA085400B7EDBF /* Base in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
6E50B8AEC76C920BE22FC478 /* [CP] Embed Pods Frameworks */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
8F58E6E75C52EB4FEEF2490F /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
|
);
|
||||||
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Pods-playbtest-checkManifestLockResult.txt",
|
||||||
|
);
|
||||||
|
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";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
9E8498E018A09B2E436F82F6 /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-playbtest/Pods-playbtest-resources.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
7577E5642CDA085400B7EDBF /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
048D61A22D67204900FDE496 /* XUDPClient.m in Sources */,
|
||||||
|
048D61A32D67204900FDE496 /* GCDAsyncUdpSocket.m in Sources */,
|
||||||
|
75E053D62CDB07F00097DA69 /* closeAD.m in Sources */,
|
||||||
|
7577E5702CDA085400B7EDBF /* ViewController.swift in Sources */,
|
||||||
|
75B994A02D23AED00046561D /* idfa.swift in Sources */,
|
||||||
|
04C0D91E2D83D5030012DDF5 /* MyTableViewCell.swift in Sources */,
|
||||||
|
7577E56C2CDA085400B7EDBF /* AppDelegate.swift in Sources */,
|
||||||
|
7577E5892CDA135500B7EDBF /* YL_PlayVC.swift in Sources */,
|
||||||
|
75B9949E2D23A4DC0046561D /* getIphone.swift in Sources */,
|
||||||
|
751A9FFB2CE1E31700BFC689 /* closeWindows.swift in Sources */,
|
||||||
|
75E053D22CDB060E0097DA69 /* YL_NetWorkManager.swift in Sources */,
|
||||||
|
046535802D802D9900B2D19B /* bbbAdManager.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
7577E5712CDA085400B7EDBF /* Main.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
7577E5722CDA085400B7EDBF /* Base */,
|
||||||
|
);
|
||||||
|
name = Main.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
7577E5762CDA085900B7EDBF /* LaunchScreen.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
7577E5772CDA085900B7EDBF /* Base */,
|
||||||
|
);
|
||||||
|
name = LaunchScreen.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
7577E57A2CDA085900B7EDBF /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
||||||
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
7577E57B2CDA085900B7EDBF /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
||||||
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
7577E57D2CDA085900B7EDBF /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = AE60AC68993A5FDD50BCF762 /* Pods-playbtest.debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGNING_ALLOWED = NO;
|
||||||
|
CODE_SIGN_IDENTITY = "Don't Code Sign";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = T23C6PFSKY;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PREFIX_HEADER = "$(SRCROOT)/playbtest/PlayB/playb.pch";
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = playbtest/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "{DisplayName}";
|
||||||
|
INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties.";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/universal/GNUSparseFile.0",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/arm64e",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/arm64",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/universal",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = {Version};
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = {BundleId};
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/playbtest/PlayB/playbtest-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
7577E57E2CDA085900B7EDBF /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 365725DAEE7A265FA302BB10 /* Pods-playbtest.release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGNING_ALLOWED = NO;
|
||||||
|
CODE_SIGN_IDENTITY = "Don't Code Sign";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = T23C6PFSKY;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
FRAMEWORK_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
GCC_PREFIX_HEADER = "$(SRCROOT)/playbtest/PlayB/playb.pch";
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = playbtest/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "{DisplayName}";
|
||||||
|
INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties.";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
LIBRARY_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/universal/GNUSparseFile.0",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/arm64e",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/arm64",
|
||||||
|
"$(PROJECT_DIR)/iphoneos/universal",
|
||||||
|
"$(PROJECT_DIR)",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = {Version};
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = {BundleId};
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/playbtest/PlayB/playbtest-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
7577E5632CDA085400B7EDBF /* Build configuration list for PBXProject "playbtest" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
7577E57A2CDA085900B7EDBF /* Debug */,
|
||||||
|
7577E57B2CDA085900B7EDBF /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
7577E57C2CDA085900B7EDBF /* Build configuration list for PBXNativeTarget "playbtest" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
7577E57D2CDA085900B7EDBF /* Debug */,
|
||||||
|
7577E57E2CDA085900B7EDBF /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 7577E5602CDA085400B7EDBF /* Project object */;
|
||||||
|
}
|
||||||
7
max/template/playbtest/playbtest.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
max/template/playbtest/playbtest.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
Binary file not shown.
@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1530"
|
||||||
|
version = "1.7">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES"
|
||||||
|
buildArchitectures = "Automatic">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "7577E5672CDA085400B7EDBF"
|
||||||
|
BuildableName = "playbtest.app"
|
||||||
|
BlueprintName = "playbtest"
|
||||||
|
ReferencedContainer = "container:playbtest.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
shouldAutocreateTestPlan = "YES">
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "7577E5672CDA085400B7EDBF"
|
||||||
|
BuildableName = "playbtest.app"
|
||||||
|
BlueprintName = "playbtest"
|
||||||
|
ReferencedContainer = "container:playbtest.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "7577E5672CDA085400B7EDBF"
|
||||||
|
BuildableName = "playbtest.app"
|
||||||
|
BlueprintName = "playbtest"
|
||||||
|
ReferencedContainer = "container:playbtest.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>playbtest.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>0</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>playbtest.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>32</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
<key>SuppressBuildableAutocreation</key>
|
||||||
|
<dict>
|
||||||
|
<key>7577E5672CDA085400B7EDBF</key>
|
||||||
|
<dict>
|
||||||
|
<key>primary</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
10
max/template/playbtest/playbtest.xcworkspace/contents.xcworkspacedata
generated
Normal file
10
max/template/playbtest/playbtest.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:playbtest.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
BIN
max/template/playbtest/playbtest.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
BIN
max/template/playbtest/playbtest.xcworkspace/xcuserdata/mac.xcuserdatad/UserInterfaceState.xcuserstate
generated
Normal file
Binary file not shown.
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bucket
|
||||||
|
uuid = "F3D0305B-7F8F-4791-926A-868E7C1A17B1"
|
||||||
|
type = "0"
|
||||||
|
version = "2.0">
|
||||||
|
</Bucket>
|
||||||
Binary file not shown.
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bucket
|
||||||
|
uuid = "F38CB3E2-DAE2-4A15-A947-BC5225EC4892"
|
||||||
|
type = "0"
|
||||||
|
version = "2.0">
|
||||||
|
<Breakpoints>
|
||||||
|
<BreakpointProxy
|
||||||
|
BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
|
||||||
|
<BreakpointContent
|
||||||
|
uuid = "281CBE3E-3D78-4056-B1C6-BA462150BBF6"
|
||||||
|
shouldBeEnabled = "Yes"
|
||||||
|
ignoreCount = "0"
|
||||||
|
continueAfterRunningActions = "No"
|
||||||
|
breakpointStackSelectionBehavior = "1"
|
||||||
|
scope = "1"
|
||||||
|
stopOnStyle = "0">
|
||||||
|
</BreakpointContent>
|
||||||
|
</BreakpointProxy>
|
||||||
|
</Breakpoints>
|
||||||
|
</Bucket>
|
||||||
46
max/template/playbtest/playbtest/AppDelegate.swift
Normal file
46
max/template/playbtest/playbtest/AppDelegate.swift
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import AppLovinSDK
|
||||||
|
|
||||||
|
@main
|
||||||
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
static var shared: AppDelegate {
|
||||||
|
return UIApplication.shared.delegate as! AppDelegate
|
||||||
|
}
|
||||||
|
var window:UIWindow?
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
|
||||||
|
|
||||||
|
window = UIWindow()
|
||||||
|
window?.frame = UIScreen.main.bounds
|
||||||
|
let vc = YL_PlayVC()
|
||||||
|
|
||||||
|
window?.rootViewController = UINavigationController(rootViewController: vc)
|
||||||
|
|
||||||
|
BbbAdManager.shared.initConfig()
|
||||||
|
|
||||||
|
BbbAdManager.shared.initAd()
|
||||||
|
|
||||||
|
|
||||||
|
window?.makeKeyAndVisible()
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func applicationWillEnterForeground(_ application: UIApplication) {
|
||||||
|
print("应用从后台进入前台")
|
||||||
|
// closeWindows.removeADVCByDelayTime(0)
|
||||||
|
closeAD.removeADVC(byDelayTime: 0)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 571 KiB |
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "1024x1024.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"platform" : "ios",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="53" y="375"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
||||||
24
max/template/playbtest/playbtest/Base.lproj/Main.storyboard
Normal file
24
max/template/playbtest/playbtest/Base.lproj/Main.storyboard
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="tne-QT-ifu">
|
||||||
|
<objects>
|
||||||
|
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
||||||
507
max/template/playbtest/playbtest/Info.plist
Normal file
507
max/template/playbtest/playbtest/Info.plist
Normal file
@ -0,0 +1,507 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>SKAdNetworkItems</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>22mmun2rn5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>238da6jt44.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>24t9a8vw3c.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>24zw6aqk47.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>252b5q8x7y.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>275upjj5gd.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>294l99pt4k.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>2fnua5tdw4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>2u9pt9hc89.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>32z4fx6l9h.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3l6bd9hu43.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3qcr597p9d.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3qy4746246.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3rd42ekr43.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3sh42y64q3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>424m5254lk.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4468km3ulz.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>44jx6755aq.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>44n7hlldy6.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>47vhws6wlr.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>488r3q3dtq.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4dzt52r2t5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4fzdc2evr5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4mn522wn87.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4pfyvq9l8r.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4w7y6s5ca2.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>523jb4fst2.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>52fl2v3hgk.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>54nzkqm89y.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>55644vm79v.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>55y65gfgn7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>578prtvx9j.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5a6flpkh64.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5l3tpt7t6e.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5lm9lj6jb7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5tjdwbrq8w.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6964rsfnh4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6g9af3uyq4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6p4ks3rnbw.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6v7lgmsu45.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6xzpu9s2p8.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6yxyv74ff7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>737z793b9f.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>74b6s63p6l.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7953jerfzd.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>79pbpufp6p.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7fmhfwg9en.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7rz58n8ntl.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7ug5zh24hu.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>84993kbrcf.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>87u5trcl3r.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>89z7zv988g.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>8c4e2ghe7u.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>8m87ys6875.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>8r8llnkz5a.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>8s468mfl3y.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>97r2b46745.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9b89h5y424.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9nlqeag3gk.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9rd848q2bz.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9t245vhmpl.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9vvzujtq5s.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9yg77x724h.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>a2p9lx4jpn.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>a7xqa6mtl2.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>a8cz6cu7e5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>av6w8kgt66.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>b9bk5wbcq9.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>bvpn9ufa9b.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>bxvub5ada5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>c3frkrj4fj.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>c6k4g5qg8m.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cg4yq2srnc.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cj5566h2ga.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cp8zw746q7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cs644xg564.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cstr6suwn9.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cwn433xbcr.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>dbu4b84rxf.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>dkc879ngq3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>dzg6xy7pwj.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>e5fvkxwrpn.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ecpz2srf59.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>eh6m2bh4zr.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ejvt5qm6ak.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f38h382jlk.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f73kdq92p3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f7s53z58qe.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>feyaarzu9v.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>fq6vru337s.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>fz2k2k5tej.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>g28c52eehv.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>g2y4y55b64.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>g6gcrrvk4p.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ggvn48r87g.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>glqzh8vgby.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>gta8lk7p23.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>gta9lk7p23.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>hb56zgv37p.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>hdw39hrw9y.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>hs6bdukanm.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>k674qkevps.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>kbd757ywx3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>kbmxgpxpgc.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>klf5c3l5u5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>krvm3zuq6h.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>lr83yxwka7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ludvb6z3bs.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>m297p6643m.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>m5mvw97r93.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>m8dbw4sv7c.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mj797d8u6f.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mlmmfzh3r3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mls7yz5dvl.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mp6xlyr22a.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mqn7fxpca7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mtkv5xtk9e.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n38lu8286q.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n66cz3y3bx.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n6fk4nfna4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n9x2a789qt.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ns5j362hk7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>nzq8sh4pbs.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>p78axxw29g.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ppxm28t8ap.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>prcb7njmu6.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>pwa73g5rt2.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>pwdxu55a5a.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>qqp299437r.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>qu637u8glc.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>r45fhb6rf7.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>rvh3l7un93.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>rx5hdcabgc.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>s39g8k73mm.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>s69wq72ugq.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>su67r6k2v3.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>t38b2kh725.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>t6d3zquu66.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>tl55sbb4fm.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>tmhh9296z4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>u679fj5vs4.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>uw77j35x4d.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v4nxqhlyqp.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v72qych5uu.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v79kvwwj4g.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v9wttpbfk9.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>vcra2ehyfk.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>vhf287vqwu.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>vutu7akeur.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>w9q455wk68.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>wg4vff78zm.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>wzmmz9fp6w.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>x44k69ngh6.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>x5l83yy675.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>x8jxxk4ff5.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>x8uqf25wch.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>xga6mpmplv.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>xy9t38ct57.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>y45688jllp.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>y5ghdn5j9k.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>yclnxrl5pm.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ydx93a7ass.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>zmvfpc5aq8.skadnetwork</string>
|
||||||
|
</dict><dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>zq492l623r.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
19
max/template/playbtest/playbtest/PlayB/CocoaAsyncSocket.h
Executable file
19
max/template/playbtest/playbtest/PlayB/CocoaAsyncSocket.h
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// CocoaAsyncSocket.h
|
||||||
|
// CocoaAsyncSocket
|
||||||
|
//
|
||||||
|
// Created by Derek Clarkson on 10/08/2015.
|
||||||
|
// CocoaAsyncSocket project is in the public domain.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
//! Project version number for CocoaAsyncSocket.
|
||||||
|
FOUNDATION_EXPORT double cocoaAsyncSocketVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for CocoaAsyncSocket.
|
||||||
|
FOUNDATION_EXPORT const unsigned char cocoaAsyncSocketVersionString[];
|
||||||
|
|
||||||
|
|
||||||
|
#import "GCD/GCDAsyncUdpSocket.h"
|
||||||
|
|
||||||
1036
max/template/playbtest/playbtest/PlayB/GCD/GCDAsyncUdpSocket.h
Executable file
1036
max/template/playbtest/playbtest/PlayB/GCD/GCDAsyncUdpSocket.h
Executable file
File diff suppressed because it is too large
Load Diff
5632
max/template/playbtest/playbtest/PlayB/GCD/GCDAsyncUdpSocket.m
Executable file
5632
max/template/playbtest/playbtest/PlayB/GCD/GCDAsyncUdpSocket.m
Executable file
File diff suppressed because it is too large
Load Diff
31
max/template/playbtest/playbtest/PlayB/MyTableViewCell.swift
Normal file
31
max/template/playbtest/playbtest/PlayB/MyTableViewCell.swift
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
//
|
||||||
|
// MyTableViewCell.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/3/14.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class MyTableViewCell: UITableViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var contentData:UILabel!
|
||||||
|
|
||||||
|
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||||
|
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
required init?(coder: NSCoder) {
|
||||||
|
fatalError("init(coder:) has not been implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func setSelected(_ selected: Bool, animated: Bool) {
|
||||||
|
super.setSelected(selected, animated: animated)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
27
max/template/playbtest/playbtest/PlayB/XUDPClient.h
Normal file
27
max/template/playbtest/playbtest/PlayB/XUDPClient.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// XUDPClient.h
|
||||||
|
// xcmd
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/2/17.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef XUDPClient_h
|
||||||
|
#define XUDPClient_h
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import "CocoaAsyncSocket.h"
|
||||||
|
|
||||||
|
typedef void (^SendCallback) (NSString *msg);
|
||||||
|
|
||||||
|
@interface XUDPClient : NSObject<GCDAsyncUdpSocketDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, copy) SendCallback hintBlock;
|
||||||
|
|
||||||
|
|
||||||
|
+(instancetype)sharedInstance;
|
||||||
|
- (void) onShow: (NSDictionary *)data;
|
||||||
|
- (void) onEnd: (NSDictionary *)data;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* XUDPClient_h */
|
||||||
143
max/template/playbtest/playbtest/PlayB/XUDPClient.m
Normal file
143
max/template/playbtest/playbtest/PlayB/XUDPClient.m
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
//
|
||||||
|
// XUDPClient.m
|
||||||
|
// xcmd
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/2/17.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import "XUDPClient.h"
|
||||||
|
|
||||||
|
#define HOST @"127.0.0.1"
|
||||||
|
#define PORT 6001
|
||||||
|
|
||||||
|
|
||||||
|
@interface XUDPClient() {
|
||||||
|
@private
|
||||||
|
GCDAsyncUdpSocket *_udpSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation XUDPClient
|
||||||
|
+(instancetype)sharedInstance
|
||||||
|
{
|
||||||
|
static XUDPClient* _sharedInstance = nil;
|
||||||
|
static dispatch_once_t oncePredicate;
|
||||||
|
dispatch_once (&oncePredicate, ^{
|
||||||
|
_sharedInstance = [[XUDPClient alloc] init];
|
||||||
|
});
|
||||||
|
return _sharedInstance;
|
||||||
|
}
|
||||||
|
-(instancetype)init {
|
||||||
|
if (self = [super init]) {
|
||||||
|
[self start];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) start
|
||||||
|
{
|
||||||
|
if (!_udpSocket)
|
||||||
|
{
|
||||||
|
_udpSocket=nil;
|
||||||
|
}
|
||||||
|
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
||||||
|
_udpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:queue];
|
||||||
|
NSError *error = nil;
|
||||||
|
if (![_udpSocket bindToPort:0 error:&error])
|
||||||
|
{
|
||||||
|
NSLog(@"Error binding: %@", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (![_udpSocket beginReceiving:&error])
|
||||||
|
{
|
||||||
|
NSLog(@"Error receiving: %@", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (void) close
|
||||||
|
{
|
||||||
|
if(_udpSocket) {
|
||||||
|
[_udpSocket closeAfterSending];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (NSString *)dic2Json: (NSDictionary *)dict {
|
||||||
|
NSError *error;
|
||||||
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
|
||||||
|
options:NSJSONWritingPrettyPrinted
|
||||||
|
error:&error];
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"dic2json err:%@", error);
|
||||||
|
}
|
||||||
|
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onShow: (NSDictionary *)data {
|
||||||
|
NSDictionary *rq = @{
|
||||||
|
@"url": @"/adtask/show",
|
||||||
|
@"body": data
|
||||||
|
};
|
||||||
|
[self send:[self dic2Json: rq]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onEnd: (NSDictionary *)data {
|
||||||
|
NSDictionary *rq = @{
|
||||||
|
@"url": @"/adtask/end",
|
||||||
|
@"body": data
|
||||||
|
};
|
||||||
|
[self send:[self dic2Json: rq]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) send: (NSString*) msg {
|
||||||
|
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
[_udpSocket sendData:data toHost:HOST port:PORT withTimeout:-1 tag:300];
|
||||||
|
}
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address
|
||||||
|
{
|
||||||
|
NSError *error = nil;
|
||||||
|
NSLog(@"Message didConnectToAddress: %@",[[NSString alloc]initWithData:address encoding:NSUTF8StringEncoding]);
|
||||||
|
[_udpSocket beginReceiving:&error];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didNotConnect:(NSError *)error
|
||||||
|
{
|
||||||
|
NSLog(@"Message didNotConnect: %@",error);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error
|
||||||
|
{
|
||||||
|
NSLog(@"Message didNotSendDataWithTag: %@",error);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *) json2dic: (NSString *) jsstr {
|
||||||
|
NSError *jsonError;
|
||||||
|
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:[jsstr dataUsingEncoding:NSUTF8StringEncoding]
|
||||||
|
options:NSJSONReadingMutableContainers
|
||||||
|
error:&jsonError];
|
||||||
|
if (jsonError) {
|
||||||
|
NSLog(@"json2dic error: %@", jsonError);
|
||||||
|
}
|
||||||
|
return dic;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
|
||||||
|
{
|
||||||
|
NSString *revDada =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
|
||||||
|
NSLog(@"Message didReceiveData :%@", revDada);
|
||||||
|
if(self.hintBlock) {
|
||||||
|
self.hintBlock(revDada);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag
|
||||||
|
{
|
||||||
|
NSLog(@"Message 发送成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
1354
max/template/playbtest/playbtest/PlayB/YL_NetWorkManager.swift
Normal file
1354
max/template/playbtest/playbtest/PlayB/YL_NetWorkManager.swift
Normal file
File diff suppressed because it is too large
Load Diff
158
max/template/playbtest/playbtest/PlayB/YL_PlayVC.swift
Normal file
158
max/template/playbtest/playbtest/PlayB/YL_PlayVC.swift
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
//
|
||||||
|
// YL_PlayVC.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class YL_PlayVC: UIViewController,UITextViewDelegate {
|
||||||
|
|
||||||
|
|
||||||
|
@IBOutlet weak var textSDKView: UITextView!
|
||||||
|
|
||||||
|
@IBOutlet weak var bundleIdLab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var deviceIdLab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var idfaLab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var ipLab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var ad1Lab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var ad2Lab: UILabel!
|
||||||
|
|
||||||
|
@IBOutlet weak var ad3Lab: UILabel!
|
||||||
|
|
||||||
|
private var observation: NSKeyValueObservation?
|
||||||
|
|
||||||
|
private var observationis: NSKeyValueObservation?
|
||||||
|
|
||||||
|
var openADTimer:Timer?
|
||||||
|
let kOpenADPerSec: CGFloat = 0.1 // 假设的秒数
|
||||||
|
let kOpenAdCTimeLength: CGFloat = 30 // 假设的超时时长
|
||||||
|
|
||||||
|
static var totalTimeC: CGFloat = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
BbbAdManager.shared.loadAd()
|
||||||
|
let bundleId = Bundle.main.bundleIdentifier ?? ""
|
||||||
|
bundleIdLab.text = "Name:\(bundleId)"
|
||||||
|
let deviceId = BbbAdManager.config.adbrush_deviceid ?? ""
|
||||||
|
deviceIdLab.text = "DeviceID:\(deviceId)"
|
||||||
|
let locIp = BbbAdManager.config.adbrush_localip ?? ""
|
||||||
|
let remoteIp = BbbAdManager.config.remouteIP
|
||||||
|
ipLab.text = "LocIP:\(locIp),RemoteIp:\(remoteIp)"
|
||||||
|
|
||||||
|
if #available(iOS 14, *) {
|
||||||
|
IDFA.shared.checkATT { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
self.idfaLab.text = "IDFA:\(idfa)"
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IDFA.shared.getIDFAForOlderVersions { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
self.idfaLab.text = "IDFA:\(idfa)"
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 确保计时器被正确添加到 RunLoop
|
||||||
|
/*
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.saveIphonelogs()
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
textSDKView.delegate = self
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
|
||||||
|
ad1Lab.text = BbbAdManager.config.adids[0]
|
||||||
|
ad2Lab.text = BbbAdManager.config.adids[1]
|
||||||
|
ad3Lab.text = BbbAdManager.config.adids[2]
|
||||||
|
|
||||||
|
|
||||||
|
self.navigationController?.navigationBar.isHidden = true
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(addTextToTextView), name: NSNotification.Name("adinfo"), object: nil)
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(adStatusChange), name: NSNotification.Name("adStatus"), object: nil)
|
||||||
|
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "adbrush_base_url:\(BbbAdManager.config.adbrush_base_url),adbrush_deviceid:\(String(describing: BbbAdManager.config.adbrush_deviceid)),adbrush_localip:\(String(describing: BbbAdManager.config.adbrush_localip)),adbrush_local_url:\(BbbAdManager.config.adbrush_local_url),adbrush_ecpm:\(BbbAdManager.config.adbrush_ecpm)"])
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 向文本末尾追加 100 行空白行
|
||||||
|
func appendExtraLines1() {
|
||||||
|
let extraLines = String(repeating: "\n", count: 100)
|
||||||
|
let currentText = textSDKView.text ?? ""
|
||||||
|
|
||||||
|
// 检查末尾是否已经有额外行,避免重复追加
|
||||||
|
if !currentText.hasSuffix(extraLines) {
|
||||||
|
textSDKView.text = currentText.trimmingCharacters(in: .whitespacesAndNewlines) + extraLines
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@objc func addTextToTextView(notification: Notification) {
|
||||||
|
if let newText = notification.userInfo?["text"] as? String {
|
||||||
|
textSDKView.text.append("\(newText)\n\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@objc func adStatusChange(notification: Notification) {
|
||||||
|
if let newText = notification.userInfo?["text"] as? String, let id = notification.userInfo?["id"] as? String {
|
||||||
|
var lab = ad1Lab
|
||||||
|
if id == BbbAdManager.config.adids[1] {
|
||||||
|
lab = ad2Lab
|
||||||
|
} else if id == BbbAdManager.config.adids[2] {
|
||||||
|
lab = ad3Lab
|
||||||
|
}
|
||||||
|
lab?.text = "\(id):\(newText)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
|
||||||
|
NotificationCenter.default.removeObserver(self)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
113
max/template/playbtest/playbtest/PlayB/YL_PlayVC.xib
Normal file
113
max/template/playbtest/playbtest/PlayB/YL_PlayVC.xib
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||||
|
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="YL_PlayVC" customModule="playbtest" customModuleProvider="target">
|
||||||
|
<connections>
|
||||||
|
<outlet property="ad1Lab" destination="DeR-4m-zng" id="n6k-D4-Ag4"/>
|
||||||
|
<outlet property="ad2Lab" destination="BdL-W5-WfA" id="Qqc-Yz-Mmg"/>
|
||||||
|
<outlet property="ad3Lab" destination="z8v-sv-b77" id="Rkf-gs-3Xs"/>
|
||||||
|
<outlet property="bundleIdLab" destination="5xi-uc-X1H" id="Rd6-aL-PDA"/>
|
||||||
|
<outlet property="deviceIdLab" destination="3I8-Aa-ppy" id="07v-LY-VRj"/>
|
||||||
|
<outlet property="idfaLab" destination="WPv-gV-Agi" id="lG2-dc-FOo"/>
|
||||||
|
<outlet property="ipLab" destination="za5-QE-lST" id="Ssa-0T-31h"/>
|
||||||
|
<outlet property="textSDKView" destination="vmc-eE-E2h" id="Pil-hd-AvH"/>
|
||||||
|
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
|
||||||
|
</connections>
|
||||||
|
</placeholder>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="Ufo-O3-fgo">
|
||||||
|
<rect key="frame" x="0.0" y="96" width="414" height="732"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="bundleid" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5xi-uc-X1H">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="414" height="21.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="deviceId" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3I8-Aa-ppy">
|
||||||
|
<rect key="frame" x="0.0" y="21.5" width="414" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="linkColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="idfa" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WPv-gV-Agi">
|
||||||
|
<rect key="frame" x="0.0" y="41" width="414" height="20.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" systemColor="systemPinkColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ip" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="za5-QE-lST">
|
||||||
|
<rect key="frame" x="0.0" y="61.5" width="414" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemGreenColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DeR-4m-zng">
|
||||||
|
<rect key="frame" x="0.0" y="81" width="414" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad2" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BdL-W5-WfA">
|
||||||
|
<rect key="frame" x="0.0" y="100.5" width="414" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad3" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z8v-sv-b77">
|
||||||
|
<rect key="frame" x="0.0" y="120" width="414" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vmc-eE-E2h">
|
||||||
|
<rect key="frame" x="0.0" y="139.5" width="414" height="592.5"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
</textView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="Ufo-O3-fgo" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="7Gs-Ju-Xws"/>
|
||||||
|
<constraint firstItem="fnl-2z-Ty3" firstAttribute="bottom" secondItem="Ufo-O3-fgo" secondAttribute="bottom" id="AD7-CS-d7G"/>
|
||||||
|
<constraint firstItem="Ufo-O3-fgo" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" id="It1-Cp-VRG"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="Ufo-O3-fgo" secondAttribute="trailing" id="PQ8-j3-fwk"/>
|
||||||
|
</constraints>
|
||||||
|
<point key="canvasLocation" x="128.98550724637681" y="-12.053571428571429"/>
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<systemColor name="linkColor">
|
||||||
|
<color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemGreenColor">
|
||||||
|
<color red="0.20392156859999999" green="0.78039215689999997" blue="0.34901960780000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemOrangeColor">
|
||||||
|
<color red="1" green="0.58431372550000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemPinkColor">
|
||||||
|
<color red="1" green="0.1764705882" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
399
max/template/playbtest/playbtest/PlayB/bbbAdManager.swift
Normal file
399
max/template/playbtest/playbtest/PlayB/bbbAdManager.swift
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
//
|
||||||
|
// bbbAdManager.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/3/11.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import AppLovinSDK
|
||||||
|
|
||||||
|
|
||||||
|
class bConfig: NSObject {
|
||||||
|
/// 广告Key
|
||||||
|
var adKey:String = "{adKey}"
|
||||||
|
|
||||||
|
/// 广告数组
|
||||||
|
var allAdIds:[String] = [{allAdIds}]
|
||||||
|
/// 广告数组
|
||||||
|
var adids:[String] = []
|
||||||
|
///设备ID
|
||||||
|
var adbrush_deviceid:String?
|
||||||
|
///最低ecpm
|
||||||
|
var adbrush_ecpm:Double = 0.0005
|
||||||
|
/// 本地ip
|
||||||
|
var adbrush_localip:String?
|
||||||
|
/// A面load show
|
||||||
|
var adbrush_base_url:String = "http://192.168.40.8:8080"
|
||||||
|
/// 本地服务
|
||||||
|
var adbrush_local_url:String = "http://127.0.0.1:6000"
|
||||||
|
|
||||||
|
/// 远程ip
|
||||||
|
var remouteIP:String = ""
|
||||||
|
/// dataId
|
||||||
|
var dataId:String = ""
|
||||||
|
|
||||||
|
///IDFA
|
||||||
|
var idfa:String = ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
var washParam:Bool = false
|
||||||
|
///
|
||||||
|
var linkId:String = ""
|
||||||
|
|
||||||
|
///load次数
|
||||||
|
var loadcount:Int = 0
|
||||||
|
|
||||||
|
var ipTime:Int = 0
|
||||||
|
|
||||||
|
override init() {
|
||||||
|
super.init()
|
||||||
|
if self.allAdIds.count > 3 {
|
||||||
|
self.adids = Array(self.allAdIds.shuffled().prefix(3))
|
||||||
|
} else {
|
||||||
|
self.adids = self.allAdIds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///是否正在展示中
|
||||||
|
@objc dynamic var isadsureshow:Bool = false
|
||||||
|
|
||||||
|
|
||||||
|
func getRandomString() -> String? {
|
||||||
|
return adids.randomElement()
|
||||||
|
}
|
||||||
|
// 判断当前是否为广告不量模式
|
||||||
|
func isADSSMode() -> Bool {
|
||||||
|
// return true
|
||||||
|
return UserDefaults.standard.bool(forKey: "kLuxSSFaceKey")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AdItem :NSObject,MAAdDelegate{
|
||||||
|
|
||||||
|
|
||||||
|
var interstitialAd:MAInterstitialAd!
|
||||||
|
var interstitialAdID: String = ""
|
||||||
|
|
||||||
|
var retryAttempt = 0.0
|
||||||
|
|
||||||
|
// 定义广告关闭后的操作闭包
|
||||||
|
var onAdClosed: (() -> Void)?
|
||||||
|
var onStatusChange:((_:String,_:Int, _:Double) -> Void)?
|
||||||
|
|
||||||
|
var startLoadTime: DispatchTime?
|
||||||
|
|
||||||
|
// 0: 初始,1:加载中,2:加载完成,3:展示中,4:关闭,5:加载失败,6:展示失败
|
||||||
|
private(set) var status: Int = 0
|
||||||
|
|
||||||
|
private(set) var ecpm:Double = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
init(adID:String){
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
self.interstitialAdID = adID
|
||||||
|
// loadInterstitialAd()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func changeStatus(st:Int) {
|
||||||
|
self.status = st
|
||||||
|
onStatusChange?(self.interstitialAdID, st, self.ecpm)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func loadInterstitialAd(){
|
||||||
|
interstitialAd = MAInterstitialAd(adUnitIdentifier:interstitialAdID)
|
||||||
|
interstitialAd.delegate = self
|
||||||
|
startLoadTime = DispatchTime.now()
|
||||||
|
changeStatus(st: 1)
|
||||||
|
NSLog("XS loadInterstitialAd\(self.interstitialAdID)")
|
||||||
|
interstitialAd.load()
|
||||||
|
NSLog("XS loadInterstitialAd 2 \(self.interstitialAdID)");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func showAd(onAdClosed: @escaping () -> Void) {
|
||||||
|
self.onAdClosed = onAdClosed
|
||||||
|
NSLog("onAdClosed set: \(self.onAdClosed != nil)")
|
||||||
|
interstitialAd.show(forPlacement: interstitialAdID)
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "---走到了show:\(interstitialAdID)"])
|
||||||
|
}
|
||||||
|
|
||||||
|
func didLoad(_ ad: MAAd) {
|
||||||
|
NSLog("XS didLoad\(self.interstitialAdID)")
|
||||||
|
BbbAdManager.config.loadcount += 1
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载广告: \(ad.adUnitIdentifier) 成功"])
|
||||||
|
retryAttempt = 0 // 重置重试次数
|
||||||
|
NSLog("成功加载广告\(ad.adUnitIdentifier)")
|
||||||
|
self.ecpm = ad.revenue
|
||||||
|
|
||||||
|
// 计算并打印加载时间
|
||||||
|
var time = 0
|
||||||
|
if let startTime = startLoadTime {
|
||||||
|
let loadDuration = calculateElapsedTime(since: startTime)
|
||||||
|
print("广告 \(ad.adUnitIdentifier) 加载时间: \(loadDuration) ms")
|
||||||
|
time = loadDuration
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Load(adid: ad.adUnitIdentifier, ecpm: ad.revenue, network: ad.networkName, countryCode: ALSdk.shared().configuration.countryCode, platformResponseTime:ad.requestLatency , dsp: ad.dspName ?? "", loadTime: time)
|
||||||
|
}
|
||||||
|
// 发布广告加载成功通知
|
||||||
|
// NotificationCenter.default.post(name: .adDidLoad, object: nil, userInfo: ["adId": ad.adUnitIdentifier])
|
||||||
|
changeStatus(st: 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError) {
|
||||||
|
NSLog("XS didFailToLoadAd 1 \(self.interstitialAdID)")
|
||||||
|
BbbAdManager.config.loadcount += 1
|
||||||
|
NSLog("XS didFailToLoadAd 2 \(self.interstitialAdID) \(error)")
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载:\(adUnitIdentifier ) 失败"])
|
||||||
|
NSLog("XS didFailToLoadAd 3 \(self.interstitialAdID)")
|
||||||
|
// NotificationCenter.default.post(name: .adDidFailToLoad, object: nil, userInfo: ["adId": adUnitIdentifier])
|
||||||
|
|
||||||
|
|
||||||
|
NSLog("XS didFailToLoadAd 4 \(self.interstitialAdID)")
|
||||||
|
changeStatus(st: 5)
|
||||||
|
NSLog("XS didFailToLoadAd 5 \(self.interstitialAdID)")
|
||||||
|
}
|
||||||
|
|
||||||
|
func didDisplay(_ ad: MAAd) {
|
||||||
|
|
||||||
|
|
||||||
|
print("成功展示了ad\(ad.adUnitIdentifier)")
|
||||||
|
// NotificationCenter.default.post(name: .adDidDisplay, object: nil, userInfo: ["adId": ad.adUnitIdentifier])
|
||||||
|
|
||||||
|
// let currentIDFV = UIDevice.current.identifierForVendor?.uuidString
|
||||||
|
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
|
||||||
|
YL_NetWorkManager.showAd(adId: ad.adUnitIdentifier, ecpm: ad.revenue, ad: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Show(adid: ad.adUnitIdentifier, ecpm: ad.revenue, network: ad.networkName, countryCode: ALSdk.shared().configuration.countryCode, platformResponseTime:ad.requestLatency , dsp: ad.dspName ?? "")
|
||||||
|
}
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "成功展示了ad\(ad.adUnitIdentifier)"])
|
||||||
|
|
||||||
|
changeStatus(st: 3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func didHide(_ ad: MAAd) {
|
||||||
|
changeStatus(st: 4)
|
||||||
|
print("成功关闭广告\(ad.adUnitIdentifier)")
|
||||||
|
onAdClosed?()
|
||||||
|
}
|
||||||
|
|
||||||
|
func didClick(_ ad: MAAd) {
|
||||||
|
print("点击了广告\(ad.adUnitIdentifier)")
|
||||||
|
}
|
||||||
|
|
||||||
|
func didFail(toDisplay ad: MAAd, withError error: MAError) {
|
||||||
|
changeStatus(st: 6)
|
||||||
|
print("展示广告\(ad.adUnitIdentifier),\(error)失败")
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "展示广告\(ad.adUnitIdentifier),\(error)失败"])
|
||||||
|
//self.onAdClosed!()
|
||||||
|
}
|
||||||
|
// 辅助函数以毫秒为单位计算经过的时间
|
||||||
|
private func calculateElapsedTime(since startTime: DispatchTime) -> Int {
|
||||||
|
let endTime = DispatchTime.now()
|
||||||
|
let nanoseconds = endTime.uptimeNanoseconds - startTime.uptimeNanoseconds
|
||||||
|
return Int(nanoseconds / 1_000_000) // 转换为毫秒
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class BbbAdManager: NSObject {
|
||||||
|
static let shared = BbbAdManager()
|
||||||
|
static let config = bConfig()
|
||||||
|
|
||||||
|
///是否正在展示中
|
||||||
|
@objc dynamic var isshow:Bool = false
|
||||||
|
|
||||||
|
// 用于存储多个广告位的管理器,Key 是广告位的 ID
|
||||||
|
private var adItems: [String: AdItem] = [:]
|
||||||
|
|
||||||
|
var openADTimer:Timer?
|
||||||
|
let kOpenADPerSec: CGFloat = 0.1 // 假设的秒数
|
||||||
|
let kOpenAdCTimeLength: CGFloat = 30 // 假设的超时时长
|
||||||
|
|
||||||
|
static var totalTimeC: CGFloat = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
// 添加广告位管理器
|
||||||
|
func add(adId: String) {
|
||||||
|
let adManager = AdItem(adID: adId)
|
||||||
|
adManager.onStatusChange = {id, st, ecpm in
|
||||||
|
// 0: 初始,1:加载中,2:加载完成,3:展示中,4:关闭,5:加载失败,6:展示失败
|
||||||
|
var text = "初始"
|
||||||
|
if st == 1 {
|
||||||
|
text = "加载中"
|
||||||
|
} else if st == 2 {
|
||||||
|
text = "加载完成"
|
||||||
|
}
|
||||||
|
else if st == 3 {
|
||||||
|
text = "展示中"
|
||||||
|
}
|
||||||
|
else if st == 4 {
|
||||||
|
text = "关闭"
|
||||||
|
}
|
||||||
|
else if st == 5 {
|
||||||
|
text = "加载失败"
|
||||||
|
}
|
||||||
|
else if st == 6 {
|
||||||
|
text = "展示失败"
|
||||||
|
}
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adStatus"), object: nil, userInfo: ["id": id, "text":"\(text),ecpm:\(ecpm)"])
|
||||||
|
}
|
||||||
|
adItems[adId] = adManager
|
||||||
|
}
|
||||||
|
|
||||||
|
override init(){
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
if BbbAdManager.config.isADSSMode() {
|
||||||
|
self.initConfig()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func initConfig () {
|
||||||
|
if #available(iOS 14, *) {
|
||||||
|
IDFA.shared.checkATT { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IDFA.shared.getIDFAForOlderVersions { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let bfaceDict = UserDefaults.standard.dictionary(forKey: "bfaceDictKey"){
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_base_url = bfaceDict["adbrush_base_url"] as? String ?? "http://183.222.62.53:58078"
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_deviceid = bfaceDict["adbrush_deviceid"] as? String ?? ""
|
||||||
|
BbbAdManager.config.adbrush_localip = bfaceDict["adbrush_localip"] as? String ?? ""
|
||||||
|
BbbAdManager.config.remouteIP = bfaceDict["remouteIP"] as? String ?? ""
|
||||||
|
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_local_url = bfaceDict["adbrush_local_url"] as? String ?? "http://127.0.0.1:6000"
|
||||||
|
BbbAdManager.config.dataId = bfaceDict["dataId"] as? String ?? ""
|
||||||
|
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_ecpm = bfaceDict["adbrush_ecpm"] as? Double ?? 0.005
|
||||||
|
BbbAdManager.config.linkId = bfaceDict["linkId"] as? String ?? ""
|
||||||
|
BbbAdManager.config.washParam = bfaceDict["washParam"] as? Bool ?? false
|
||||||
|
} else {
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "获取字典失败"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initAd() {
|
||||||
|
let initConfig = ALSdkInitializationConfiguration(sdkKey: BbbAdManager.config.adKey) { builder in
|
||||||
|
|
||||||
|
builder.mediationProvider = ALMediationProviderMAX
|
||||||
|
|
||||||
|
// Perform any additional configuration/setting changes
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
|
||||||
|
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "初始化广告成功"])
|
||||||
|
// YL_NetWorkManager().requestRemoteIp()
|
||||||
|
BbbAdManager.shared.loadAd2()
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
|
||||||
|
BbbAdManager.shared.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func loadAd2() {
|
||||||
|
for(index,ad) in self.adItems.values.enumerated() {
|
||||||
|
ad.loadInterstitialAd()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func loadAd() {
|
||||||
|
if BbbAdManager.config.washParam == true{
|
||||||
|
let adid = BbbAdManager.config.getRandomString()
|
||||||
|
BbbAdManager.shared.add(adId: adid ?? "")
|
||||||
|
}else{
|
||||||
|
for (index, adId) in BbbAdManager.config.adids.enumerated() {
|
||||||
|
//DispatchQueue.main.asyncAfter(deadline: .now() + Double(index) * 1) {
|
||||||
|
BbbAdManager.shared.add(adId: adId)
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func start() {
|
||||||
|
guard openADTimer == nil else { return }
|
||||||
|
openADTimer = Timer.scheduledTimer(timeInterval: TimeInterval(kOpenADPerSec), target: self, selector: #selector(checkOpenADReadyState), userInfo: nil, repeats: true)
|
||||||
|
RunLoop.current.add(openADTimer!, forMode: .common)
|
||||||
|
}
|
||||||
|
func isEnd () -> Bool {
|
||||||
|
if(self.isshow) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for (_, ad) in BbbAdManager.shared.adItems {
|
||||||
|
if(ad.status <= 1) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (ad.status == 2 && ad.ecpm >= BbbAdManager.config.adbrush_ecpm) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
func showAd() {
|
||||||
|
guard !self.isshow else { return }
|
||||||
|
for (_, ad) in BbbAdManager.shared.adItems {
|
||||||
|
if (ad.status == 2 && ad.ecpm >= BbbAdManager.config.adbrush_ecpm) {
|
||||||
|
ad.showAd { [weak self] in
|
||||||
|
NSLog("广告关闭")
|
||||||
|
guard let self = self else { return }
|
||||||
|
self.isshow = false
|
||||||
|
}
|
||||||
|
self.isshow = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func closeAd(v:Int) {
|
||||||
|
closeAD.removeADVC(byDelayTime: v)
|
||||||
|
self.isshow = false
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func checkOpenADReadyState(){
|
||||||
|
BbbAdManager.totalTimeC += kOpenADPerSec
|
||||||
|
|
||||||
|
if BbbAdManager.shared.isEnd() || BbbAdManager.totalTimeC >= kOpenAdCTimeLength {
|
||||||
|
openADTimer?.invalidate()
|
||||||
|
openADTimer = nil
|
||||||
|
YL_NetWorkManager.loadend(max_ecpm: 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
if BbbAdManager.shared.isshow == false{
|
||||||
|
BbbAdManager.shared.showAd()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
19
max/template/playbtest/playbtest/PlayB/closeAD.h
Normal file
19
max/template/playbtest/playbtest/PlayB/closeAD.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// closeAD.h
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/6.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@interface closeAD : NSObject
|
||||||
|
+ (void)removeADVCByDelayTime:(NSInteger)delayTime;
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
141
max/template/playbtest/playbtest/PlayB/closeAD.m
Normal file
141
max/template/playbtest/playbtest/PlayB/closeAD.m
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
//
|
||||||
|
// closeAD.m
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/6.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "closeAD.h"
|
||||||
|
|
||||||
|
@implementation closeAD
|
||||||
|
+ (void)removeADVCByDelayTime:(NSInteger)delayTime {
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayTime / 1000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
[closeAD removeVungleFullScreenPresenter];
|
||||||
|
[closeAD closeADWindow];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//+ (void)closeADWindow {
|
||||||
|
// NSLog(@"已经执行closeADWindow.....");
|
||||||
|
// UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
|
||||||
|
// [keyWindow.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
// UIViewController *vc = obj.subviews.firstObject.nextResponder;
|
||||||
|
// if ([vc isKindOfClass:[NSClassFromString(@"ALAppLovinVideoViewController") class]]) {
|
||||||
|
// if ([vc respondsToSelector:@selector(skipVideo)]) {
|
||||||
|
// NSLog(@"执行了skipVideo.....");
|
||||||
|
// [vc performSelector:@selector(skipVideo) withObject:nil];
|
||||||
|
// }
|
||||||
|
// if ([vc respondsToSelector:@selector(handleCloseButton)]) {
|
||||||
|
// NSLog(@"执行了handleCloseButton.....");
|
||||||
|
// [vc performSelector:@selector(handleCloseButton) withObject:nil];
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// [closeAD checkCloseWindown];
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// else if ([vc isKindOfClass:[NSClassFromString(@"ALVASTVideoViewController") class]]) {
|
||||||
|
// [vc performSelector:@selector(dismiss) withObject:nil];
|
||||||
|
//
|
||||||
|
// [closeAD checkCloseWindown];
|
||||||
|
// [closeAD removeVungleFullScreenPresenter];
|
||||||
|
// }
|
||||||
|
// }];
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
+ (void)closeADWindow {
|
||||||
|
NSLog(@"Executing closeADWindow - First Pass");
|
||||||
|
[self performCloseADWindowActions];
|
||||||
|
|
||||||
|
NSLog(@"Executing closeADWindow - Second Pass");
|
||||||
|
[self performCloseADWindowActions];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)performCloseADWindowActions {
|
||||||
|
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
|
||||||
|
if (!keyWindow) return; // Ensure keyWindow is non-nil
|
||||||
|
|
||||||
|
[keyWindow.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||||||
|
UIViewController *vc = obj.subviews.firstObject.nextResponder;
|
||||||
|
if (!vc || ![vc isKindOfClass:[UIViewController class]]) return; // Check for non-nil vc
|
||||||
|
|
||||||
|
if ([vc isKindOfClass:[NSClassFromString(@"ALAppLovinVideoViewController") class]]) {
|
||||||
|
if ([vc respondsToSelector:@selector(skipVideo)]) {
|
||||||
|
NSLog(@"Executing skipVideo...");
|
||||||
|
[vc performSelector:@selector(skipVideo) withObject:nil];
|
||||||
|
}
|
||||||
|
if ([vc respondsToSelector:@selector(handleCloseButton)]) {
|
||||||
|
NSLog(@"Executing handleCloseButton...");
|
||||||
|
[vc performSelector:@selector(handleCloseButton) withObject:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
// [closeAD checkCloseWindown];
|
||||||
|
[closeAD removeVungleFullScreenPresenter];
|
||||||
|
|
||||||
|
} else if ([vc isKindOfClass:[NSClassFromString(@"ALVASTVideoViewController") class]]) {
|
||||||
|
if ([vc respondsToSelector:@selector(dismiss)]) {
|
||||||
|
[vc performSelector:@selector(dismiss) withObject:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
// [closeAD checkCloseWindown];
|
||||||
|
[closeAD removeVungleFullScreenPresenter];
|
||||||
|
}
|
||||||
|
[closeAD removeVungleFullScreenPresenter];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
//+ (void)checkCloseWindown {
|
||||||
|
// static NSInteger closeCounter = 0;
|
||||||
|
// if (closeCounter >= 2) {
|
||||||
|
// NSLog(@"Stopping recursive closeADWindow calls");
|
||||||
|
// closeCounter = 0;
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// closeCounter++;
|
||||||
|
|
||||||
|
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.7 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
// [closeAD closeADWindow];
|
||||||
|
// });
|
||||||
|
//}
|
||||||
|
|
||||||
|
+ (void)removeVungleFullScreenPresenter {
|
||||||
|
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
|
||||||
|
UIViewController *foundViewController = [self findFullScreenPresenterInViewController:keyWindow.rootViewController];
|
||||||
|
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
NSDictionary *config = [userDefaults dictionaryForKey:@"xyzshell_hooks_settings_hook"];
|
||||||
|
if (foundViewController) {
|
||||||
|
NSLog(@"Found FullScreenPresenter instance: %@", foundViewController);
|
||||||
|
|
||||||
|
// 关闭或移除 FullScreenPresenter
|
||||||
|
[foundViewController dismissViewControllerAnimated:YES completion:^{
|
||||||
|
NSLog(@"FullScreenPresenter dismissed.");
|
||||||
|
}];
|
||||||
|
} else {
|
||||||
|
NSLog(@"FullScreenPresenter not found.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (UIViewController *)findFullScreenPresenterInViewController:(UIViewController *)viewController {
|
||||||
|
if ([viewController isKindOfClass:NSClassFromString(@"VungleAdsSDK.FullScreenPresenter")]) {
|
||||||
|
return viewController;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 递归遍历所有子控制器
|
||||||
|
for (UIViewController *childViewController in viewController.childViewControllers) {
|
||||||
|
UIViewController *foundViewController = [self findFullScreenPresenterInViewController:childViewController];
|
||||||
|
if (foundViewController) {
|
||||||
|
return foundViewController;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查 presentedViewController
|
||||||
|
if (viewController.presentedViewController) {
|
||||||
|
return [self findFullScreenPresenterInViewController:viewController.presentedViewController];
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
78
max/template/playbtest/playbtest/PlayB/closeWindows.swift
Normal file
78
max/template/playbtest/playbtest/PlayB/closeWindows.swift
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
//
|
||||||
|
// closeWindows.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/11.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class closeWindows {
|
||||||
|
|
||||||
|
@objc static func removeADVCByDelayTime(_ delayTime: Int) {
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(delayTime)) {
|
||||||
|
// CloseAD.removeVungleFullScreenPresenter()
|
||||||
|
closeWindows.closeADWindow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc static func closeADWindow() {
|
||||||
|
print("Executing closeADWindow - First Pass")
|
||||||
|
performCloseADWindowActions()
|
||||||
|
|
||||||
|
print("Executing closeADWindow - Second Pass")
|
||||||
|
// performCloseADWindowActions()
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func performCloseADWindowActions() {
|
||||||
|
guard let keyWindow = UIApplication.shared.keyWindow else { return }
|
||||||
|
|
||||||
|
keyWindow.subviews.forEach { view in
|
||||||
|
if let vc = view.subviews.first?.next as? UIViewController {
|
||||||
|
|
||||||
|
if vc.isKind(of: NSClassFromString("ALAppLovinVideoViewController") ?? UIViewController.self) ||
|
||||||
|
vc.isKind(of: NSClassFromString("ALVASTVideoViewController") ?? UIViewController.self) {
|
||||||
|
|
||||||
|
print("Removing ad view from window...")
|
||||||
|
view.removeFromSuperview() // Remove the ad view directly from the window’s subviews
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closeWindows.removeVungleFullScreenPresenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func removeVungleFullScreenPresenter() {
|
||||||
|
guard let keyWindow = UIApplication.shared.keyWindow else { return }
|
||||||
|
if let foundView = findFullScreenPresenterInViewController(keyWindow.rootViewController) {
|
||||||
|
print("Found FullScreenPresenter instance: \(foundView)")
|
||||||
|
foundView.view.removeFromSuperview()
|
||||||
|
print("FullScreenPresenter view removed from superview.")
|
||||||
|
} else {
|
||||||
|
print("FullScreenPresenter not found.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func findFullScreenPresenterInViewController(_ viewController: UIViewController?) -> UIViewController? {
|
||||||
|
guard let viewController = viewController else { return nil }
|
||||||
|
|
||||||
|
if viewController.isKind(of: NSClassFromString("VungleAdsSDK.FullScreenPresenter") ?? UIViewController.self) {
|
||||||
|
return viewController
|
||||||
|
}
|
||||||
|
|
||||||
|
for childViewController in viewController.children {
|
||||||
|
if let foundVC = findFullScreenPresenterInViewController(childViewController) {
|
||||||
|
return foundVC
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let presentedVC = viewController.presentedViewController {
|
||||||
|
return findFullScreenPresenterInViewController(presentedVC)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
154
max/template/playbtest/playbtest/PlayB/getIphone.swift
Normal file
154
max/template/playbtest/playbtest/PlayB/getIphone.swift
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
//
|
||||||
|
// getIphone.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/12/31.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class getIpne {
|
||||||
|
static var shard = getIpne()
|
||||||
|
private init() {}
|
||||||
|
|
||||||
|
func getIPhoneModel() -> iPhoneModel {
|
||||||
|
var systemInfo = utsname()
|
||||||
|
uname(&systemInfo)
|
||||||
|
|
||||||
|
let machineMirror = Mirror(reflecting: systemInfo.machine)
|
||||||
|
let identifier = machineMirror.children.reduce("") { identifier, element in
|
||||||
|
guard let value = element.value as? Int8, value != 0 else { return identifier }
|
||||||
|
return identifier + String(UnicodeScalar(UInt8(value)))
|
||||||
|
}
|
||||||
|
|
||||||
|
switch identifier {
|
||||||
|
case "iPhone5,1", "iPhone5,2": return .iPhone5
|
||||||
|
case "iPhone5,3", "iPhone5,4": return .iPhone5C
|
||||||
|
case "iPhone6,1", "iPhone6,2": return .iPhone5S
|
||||||
|
case "iPhone7.2": return .iPhone6
|
||||||
|
case "iPhone7,1": return .iPhone6Plus
|
||||||
|
case "iPhone8,1": return .iPhone6s
|
||||||
|
case "iPhone8,2": return .iPhone6Plus
|
||||||
|
case "iPhone8,4": return .iPhoneSE1
|
||||||
|
case "iPhone9,1", "iPhone9,3": return .iPhone7
|
||||||
|
case "iPhone9,2", "iPhone9,4": return .iPhone7Plus
|
||||||
|
case "iPhone10,1", "iPhone10,4": return .iPhone8
|
||||||
|
case "iPhone10,2", "iPhone10,5": return .iPhone8Plus
|
||||||
|
case "iPhone10,3", "iPhone10,6": return .iPhoneX
|
||||||
|
case "iPhone11,8": return .iPhoneXR
|
||||||
|
case "iPhone11,2": return .iPhoneXS
|
||||||
|
case "iPhone11,6", "iPhone11,4": return .iPhoneXSMax
|
||||||
|
case "iPhone12,1": return .iPhone11
|
||||||
|
case "iPhone12,3": return .iPhone11Pro
|
||||||
|
case "iPhone12,5": return .iPhone11ProMax
|
||||||
|
case "iPhone12,8": return .iPhoneSE2
|
||||||
|
case "iPhone13,1": return .iPhone12Mini
|
||||||
|
case "iPhone13,2": return .iPhone12
|
||||||
|
case "iPhone13,3": return .iPhone12Pro
|
||||||
|
case "iPhone13,4": return .iPhone12ProMax
|
||||||
|
case "iPhone14,4": return .iPhone13Mini
|
||||||
|
case "iPhone14,5": return .iPhone13
|
||||||
|
case "iPhone14,2": return .iPhone13Pro
|
||||||
|
case "iPhone14,3": return .iPhone13ProMax
|
||||||
|
case "iPhone14,6": return .iPhoneSE3
|
||||||
|
case "iPhone14,7": return .iPhone14
|
||||||
|
case "iPhone14,8": return .iPhone14Plus
|
||||||
|
case "iPhone15,2": return .iPhone14Pro
|
||||||
|
case "iPhone15,3": return .iPhone14ProMax
|
||||||
|
case "iPhone15,4": return .iPhone15
|
||||||
|
case "iPhone15,5": return .iPhone15Plus
|
||||||
|
case "iPhone16,1": return .iPhone15Pro
|
||||||
|
case "iPhone16,2": return .iPhone15ProMax
|
||||||
|
case "i386": return .simulator
|
||||||
|
case "x86_64": return .simulator
|
||||||
|
default: return .unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum iPhoneModel {
|
||||||
|
case iPhone15
|
||||||
|
case iPhone15Plus
|
||||||
|
case iPhone15Pro
|
||||||
|
case iPhone15ProMax
|
||||||
|
case iPhone14
|
||||||
|
case iPhone14Plus
|
||||||
|
case iPhone14Pro
|
||||||
|
case iPhone14ProMax
|
||||||
|
case iPhone13ProMax
|
||||||
|
case iPhone13Pro
|
||||||
|
case iPhone13
|
||||||
|
case iPhone13Mini
|
||||||
|
case iPhone12ProMax
|
||||||
|
case iPhone12Pro
|
||||||
|
case iPhone12
|
||||||
|
case iPhone12Mini
|
||||||
|
case iPhone11ProMax
|
||||||
|
case iPhone11Pro
|
||||||
|
case iPhone11
|
||||||
|
case iPhoneXSMax
|
||||||
|
case iPhoneXS
|
||||||
|
case iPhoneXR
|
||||||
|
case iPhoneX
|
||||||
|
case iPhone8Plus
|
||||||
|
case iPhone8
|
||||||
|
case iPhone7Plus
|
||||||
|
case iPhone7
|
||||||
|
case iPhone6sPlus
|
||||||
|
case iPhone6s
|
||||||
|
case iPhone6Plus
|
||||||
|
case iPhone6
|
||||||
|
case iPhone5S
|
||||||
|
case iPhone5C
|
||||||
|
case iPhone5
|
||||||
|
case iPhoneSE3
|
||||||
|
case iPhoneSE2
|
||||||
|
case iPhoneSE1
|
||||||
|
case simulator
|
||||||
|
case unknown
|
||||||
|
|
||||||
|
public func getName() -> String {
|
||||||
|
switch self {
|
||||||
|
case .iPhone5: return "iPhone 5"
|
||||||
|
case .iPhone5C: return "iPhone 5C"
|
||||||
|
case .iPhone5S: return "iPhone 5S"
|
||||||
|
case .iPhone6: return "iPhone 6"
|
||||||
|
case .iPhone6Plus: return "iPhone 6 Plus"
|
||||||
|
case .iPhone6s: return "iPhone 6s"
|
||||||
|
case .iPhone6sPlus: return "iPhone 6s Plus"
|
||||||
|
case .iPhoneSE1: return "iPhone SE1"
|
||||||
|
case .iPhone7: return "iPhone 7"
|
||||||
|
case .iPhone7Plus: return "iPhone 7 Plus"
|
||||||
|
case .iPhone8: return "iPhone 8"
|
||||||
|
case .iPhone8Plus: return "iPhone 8 Plus"
|
||||||
|
case .iPhoneX: return "iPhone X"
|
||||||
|
case .iPhoneXR: return "iPhone XR"
|
||||||
|
case .iPhoneXS: return "iPhone XS"
|
||||||
|
case .iPhoneXSMax: return "iPhone XS Max"
|
||||||
|
case .iPhone11: return "iPhone 11"
|
||||||
|
case .iPhone11Pro: return "iPhone 11 Pro"
|
||||||
|
case .iPhone11ProMax: return "iPhone 11 Pro Max"
|
||||||
|
case .iPhoneSE2: return "iPhone SE2"
|
||||||
|
case .iPhone12Mini: return "iPhone 12 mini"
|
||||||
|
case .iPhone12: return "iPhone 12"
|
||||||
|
case .iPhone12Pro: return "iPhone 12 Pro"
|
||||||
|
case .iPhone12ProMax: return "iPhone 12 Pro Max"
|
||||||
|
case .iPhone13Mini: return "iPhone 13 mini"
|
||||||
|
case .iPhone13: return "iPhone 13"
|
||||||
|
case .iPhone13Pro: return "iPhone 13 Pro"
|
||||||
|
case .iPhone13ProMax: return "iPhone 13 Pro Max"
|
||||||
|
case .simulator: return "Simulator"
|
||||||
|
case .unknown: return "unknown"
|
||||||
|
case .iPhone14: return "iPhone 14"
|
||||||
|
case .iPhone14Plus: return "iPhone 14 Plus"
|
||||||
|
case .iPhone14Pro: return "iPhone 14 Pro"
|
||||||
|
case .iPhone14ProMax: return "iPhone 14 Pro Max"
|
||||||
|
case .iPhoneSE3: return "iPhone SE3"
|
||||||
|
case .iPhone15: return "iPhone 15"
|
||||||
|
case .iPhone15Plus: return "iPhone 15 Plus"
|
||||||
|
case .iPhone15Pro: return "iPhone 15 Pro"
|
||||||
|
case .iPhone15ProMax: return "iPhone 15 Pro Max"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
95
max/template/playbtest/playbtest/PlayB/idfa.swift
Normal file
95
max/template/playbtest/playbtest/PlayB/idfa.swift
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
//
|
||||||
|
// idfa.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/12/31.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import AppTrackingTransparency
|
||||||
|
import AdSupport
|
||||||
|
|
||||||
|
class IDFA {
|
||||||
|
static let shared = IDFA()
|
||||||
|
|
||||||
|
/// 检查并请求 ATT 授权
|
||||||
|
@available(iOS 14, *)
|
||||||
|
func checkATT(completion: @escaping (String?) -> Void) {
|
||||||
|
let status = ATTrackingManager.trackingAuthorizationStatus
|
||||||
|
switch status {
|
||||||
|
case .notDetermined:
|
||||||
|
// 请求授权
|
||||||
|
ATTrackingManager.requestTrackingAuthorization { newStatus in
|
||||||
|
self.handleATTStatus(newStatus, completion: completion)
|
||||||
|
}
|
||||||
|
case .authorized, .denied, .restricted:
|
||||||
|
// 处理已有的状态
|
||||||
|
handleATTStatus(status, completion: completion)
|
||||||
|
@unknown default:
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 处理 ATT 授权状态
|
||||||
|
@available(iOS 14, *)
|
||||||
|
private func handleATTStatus(_ status: ATTrackingManager.AuthorizationStatus, completion: @escaping (String?) -> Void) {
|
||||||
|
switch status {
|
||||||
|
case .authorized:
|
||||||
|
// 用户已授权,获取 IDFA
|
||||||
|
let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
completion(idfa)
|
||||||
|
// starManager.shared.idfa = idfa
|
||||||
|
case .denied, .restricted:
|
||||||
|
// 用户拒绝或受限,返回 nil
|
||||||
|
print("用户拒绝授权或功能受限")
|
||||||
|
completion(nil)
|
||||||
|
case .notDetermined:
|
||||||
|
// 不应该出现,预防性处理
|
||||||
|
print("授权状态仍未确定")
|
||||||
|
completion(nil)
|
||||||
|
@unknown default:
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getIDFAForOlderVersions(completion: @escaping (String?) -> Void) {
|
||||||
|
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
|
||||||
|
let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
completion(idfa)
|
||||||
|
} else {
|
||||||
|
print("广告跟踪受限")
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//func requestIDFA(completion: @escaping (String?) -> Void) {
|
||||||
|
// if #available(iOS 14.5, *) {
|
||||||
|
// // 检查跟踪授权状态
|
||||||
|
// ATTrackingManager.requestTrackingAuthorization { status in
|
||||||
|
// switch status {
|
||||||
|
// case .authorized:
|
||||||
|
// // 用户授权后,获取 IDFA
|
||||||
|
// let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
// completion(idfa)
|
||||||
|
// case .denied, .restricted, .notDetermined:
|
||||||
|
// // 用户拒绝、限制或未决定时,IDFA 将不可用
|
||||||
|
// completion(nil)
|
||||||
|
// @unknown default:
|
||||||
|
// completion(nil)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// // 对于 iOS 14.4 及以下版本,直接获取 IDFA
|
||||||
|
// if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
|
||||||
|
// let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
// completion(idfa)
|
||||||
|
// } else {
|
||||||
|
// completion(nil)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
15
max/template/playbtest/playbtest/PlayB/playb.pch
Normal file
15
max/template/playbtest/playbtest/PlayB/playb.pch
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// playb.pch
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/6.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef playb_pch
|
||||||
|
#define playb_pch
|
||||||
|
#import "playbtest-Swift.h"
|
||||||
|
|
||||||
|
// Include any system framework and library headers here that should be included in all compilation units.
|
||||||
|
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
|
||||||
|
|
||||||
|
#endif /* playb_pch */
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
//
|
||||||
|
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "closeAD.h"
|
||||||
|
#import "XUDPClient.h"
|
||||||
19
max/template/playbtest/playbtest/ViewController.swift
Normal file
19
max/template/playbtest/playbtest/ViewController.swift
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// ViewController.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class ViewController: UIViewController {
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
// Do any additional setup after loading the view.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
111
topon/build.py
Normal file
111
topon/build.py
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
def build(ad_app_id, ad_key, ad_ids, app_display_name,app_bundle_id,app_version,app_icon):
|
||||||
|
cmd = """
|
||||||
|
rm -rfv build
|
||||||
|
mkdir build
|
||||||
|
cp -rfv template/PlayBTopOn ./build/
|
||||||
|
"""
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
# 创建编译目录复制模版到build目录
|
||||||
|
|
||||||
|
print("--------------------")
|
||||||
|
# 读取配置
|
||||||
|
|
||||||
|
|
||||||
|
### 复制icon
|
||||||
|
|
||||||
|
cmd = f"""
|
||||||
|
cp -fv {app_icon} ./build/PlayBTopOn/PlayBTopOn/Assets.xcassets/AppIcon.appiconset/h687603756335b.png
|
||||||
|
"""
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
## 修改ad信息
|
||||||
|
print("修改ad信息")
|
||||||
|
code_path = './build/PlayBTopOn/PlayBTopOn/playB/bbbAdManager.swift'
|
||||||
|
with open(code_path, 'r') as f:
|
||||||
|
code = f.read()
|
||||||
|
code = code.replace("{appId}", ad_app_id)
|
||||||
|
code = code.replace("{adKey}", ad_key)
|
||||||
|
code = code.replace("{allAdIds}", '"' + "\",\"".join(ad_ids) + '"')
|
||||||
|
with open(code_path, 'w') as f:
|
||||||
|
f.write(code)
|
||||||
|
|
||||||
|
print("修改项目信息")
|
||||||
|
prj_path = "./build/PlayBTopOn/PlayBTopOn.xcodeproj/project.pbxproj"
|
||||||
|
with open(prj_path, 'r') as f:
|
||||||
|
code = f.read()
|
||||||
|
code = code.replace("{DisplayName}", app_display_name)
|
||||||
|
code = code.replace("{BundleId}", app_bundle_id)
|
||||||
|
code = code.replace("{Version}", app_version)
|
||||||
|
with open(prj_path, 'w') as f:
|
||||||
|
f.write(code)
|
||||||
|
|
||||||
|
print("\n开始编译\n")
|
||||||
|
cmd = """
|
||||||
|
cd ./build/PlayBTopOn
|
||||||
|
xcodebuild clean build -workspace PlayBTopOn.xcworkspace -configuration Release -scheme PlayBTopOn -derivedDataPath "../Target" -destination "platform=iOS,id=00008110-000815AE1179801E"
|
||||||
|
cd ../../
|
||||||
|
"""
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
print("\n开始打包\n")
|
||||||
|
|
||||||
|
cmd = """
|
||||||
|
mkdir ./build/ipas
|
||||||
|
cp -rfv ./build/Target/Build/Products/Release-iphoneos/PlayBTopOn.app ./build/ipas/
|
||||||
|
cp ./template/embedded.mobileprovision ./build/ipas/PlayBTopOn.app/embedded.mobileprovision
|
||||||
|
find "./build/ipas/PlayBTopOn.app" -name "*.framework" -exec codesign -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" {} \;
|
||||||
|
find "./build/ipas/PlayBTopOn.app" -name "*.dylib" -exec codesign -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" {} \;
|
||||||
|
|
||||||
|
codesign --entitlements ./template/Filza.entitlements -f -s "iPhone Distribution: Shumei Luo (T23C6PFSKY)" ./build/ipas/PlayBTopOn.app
|
||||||
|
|
||||||
|
mkdir ./build/ipas/Payload
|
||||||
|
mv ./build/ipas/PlayBTopOn.app ./build/ipas/Payload
|
||||||
|
cd ./build/ipas
|
||||||
|
zip -r playb-topon.ipa Payload/
|
||||||
|
"""
|
||||||
|
|
||||||
|
subprocess.call(cmd, shell=True)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
app_icon = "/Users/mac/codes/ios/empty_topon/ipas/lux/Tikr/appicon.png"
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
ad_app_id = "h68b560a6957c8"
|
||||||
|
ad_key = "a540e4c6e557c1ed3f06b5394246c5a42"
|
||||||
|
ad_ids = ["n68b560e6e9866","n68b560e6b3b1f","n68b560e676221","n68b560e6181aa"]
|
||||||
|
|
||||||
|
app_display_name = "WYMT Radar"
|
||||||
|
app_bundle_id = "com.wsi.WSIWeatherWYMT-Radar"
|
||||||
|
app_version = "5.17.706"
|
||||||
|
|
||||||
|
|
||||||
|
build(ad_app_id, ad_key, ad_ids, app_display_name, app_bundle_id, app_version, app_icon)
|
||||||
|
else:
|
||||||
|
json_path = sys.argv[1]
|
||||||
|
with open(json_path, 'r') as f:
|
||||||
|
config = json.loads(f.read())
|
||||||
|
|
||||||
|
print(config)
|
||||||
|
|
||||||
|
ad_app_id = config["sdk_app_id"]
|
||||||
|
ad_key = config["sdk_key"]
|
||||||
|
ad_ids = config["ad_ids"]
|
||||||
|
app_display_name = config["app_name"]
|
||||||
|
app_bundle_id = config["app_pkg_name"]
|
||||||
|
app_version = config["app_ver"]
|
||||||
|
app_icon_tmp:str = config["app_icon"]
|
||||||
|
if not app_icon_tmp is None and app_icon_tmp.strip() != '':
|
||||||
|
app_icon = os.path.join(os.path.dirname(json_path), app_icon_tmp)
|
||||||
|
|
||||||
|
build(ad_app_id, ad_key, ad_ids, app_display_name, app_bundle_id, app_version, app_icon)
|
||||||
|
|
||||||
26
topon/template/Filza.entitlements
Normal file
26
topon/template/Filza.entitlements
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>application-identifier</key>
|
||||||
|
<string>T23C6PFSKY.forecast.barometer.storm.radar.Weather10</string>
|
||||||
|
<key>aps-environment</key>
|
||||||
|
<string>production</string>
|
||||||
|
<key>com.apple.developer.associated-domains</key>
|
||||||
|
<string>*</string>
|
||||||
|
<key>com.apple.developer.team-identifier</key>
|
||||||
|
<string>T23C6PFSKY</string>
|
||||||
|
<key>com.apple.security.application-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>group.forecast.barometer.storm.radar.Weather10.appshortcallid</string>
|
||||||
|
<string>group.forecast.barometer.storm.radar.Weather10.appcallid</string>
|
||||||
|
</array>
|
||||||
|
<key>get-task-allow</key>
|
||||||
|
<true/>
|
||||||
|
<key>keychain-access-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>T23C6PFSKY.*</string>
|
||||||
|
<string>com.apple.token</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
540
topon/template/PlayBTopOn/PlayBTopOn.xcodeproj/project.pbxproj
Normal file
540
topon/template/PlayBTopOn/PlayBTopOn.xcodeproj/project.pbxproj
Normal file
@ -0,0 +1,540 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 56;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
049B446F2DACAB6D0005EB66 /* GCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 049B446A2DACAB6D0005EB66 /* GCDAsyncUdpSocket.m */; };
|
||||||
|
049B44702DACAB6D0005EB66 /* bbbAdManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 049B446E2DACAB6D0005EB66 /* bbbAdManager.swift */; };
|
||||||
|
049B44712DACAB6D0005EB66 /* XUDPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = 049B446D2DACAB6D0005EB66 /* XUDPClient.m */; };
|
||||||
|
755ADA202D2D25C600C9D994 /* getIphone.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755ADA1E2D2D25C600C9D994 /* getIphone.swift */; };
|
||||||
|
755ADA212D2D25C600C9D994 /* idfa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 755ADA1F2D2D25C600C9D994 /* idfa.swift */; };
|
||||||
|
75F8FFD12CE7233B008E8DF6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F8FFD02CE7233B008E8DF6 /* AppDelegate.swift */; };
|
||||||
|
75F8FFD52CE7233B008E8DF6 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F8FFD42CE7233B008E8DF6 /* ViewController.swift */; };
|
||||||
|
75F8FFD82CE7233B008E8DF6 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 75F8FFD72CE7233B008E8DF6 /* Base */; };
|
||||||
|
75F8FFDA2CE72340008E8DF6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 75F8FFD92CE72340008E8DF6 /* Assets.xcassets */; };
|
||||||
|
75F8FFDD2CE72340008E8DF6 /* Base in Resources */ = {isa = PBXBuildFile; fileRef = 75F8FFDC2CE72340008E8DF6 /* Base */; };
|
||||||
|
75F8FFE82CE723FF008E8DF6 /* YL_PlayVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75F8FFE52CE723FE008E8DF6 /* YL_PlayVC.xib */; };
|
||||||
|
75F8FFE92CE723FF008E8DF6 /* YL_PlayVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F8FFE62CE723FF008E8DF6 /* YL_PlayVC.swift */; };
|
||||||
|
75F8FFF32CE72555008E8DF6 /* initializationTopOn.m in Sources */ = {isa = PBXBuildFile; fileRef = 75F8FFF12CE72555008E8DF6 /* initializationTopOn.m */; };
|
||||||
|
75F8FFF72CE72B7D008E8DF6 /* YL_NetWorkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75F8FFF62CE72B7D008E8DF6 /* YL_NetWorkManager.swift */; };
|
||||||
|
84921A6E873B758EF39EBDFA /* Pods_PlayBTopOn.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33A6D387585D55B3F340F5DB /* Pods_PlayBTopOn.framework */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
049B44682DACAB6D0005EB66 /* CocoaAsyncSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CocoaAsyncSocket.h; sourceTree = "<group>"; };
|
||||||
|
049B44692DACAB6D0005EB66 /* GCDAsyncUdpSocket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GCDAsyncUdpSocket.h; sourceTree = "<group>"; };
|
||||||
|
049B446A2DACAB6D0005EB66 /* GCDAsyncUdpSocket.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GCDAsyncUdpSocket.m; sourceTree = "<group>"; };
|
||||||
|
049B446C2DACAB6D0005EB66 /* XUDPClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XUDPClient.h; sourceTree = "<group>"; };
|
||||||
|
049B446D2DACAB6D0005EB66 /* XUDPClient.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XUDPClient.m; sourceTree = "<group>"; };
|
||||||
|
049B446E2DACAB6D0005EB66 /* bbbAdManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = bbbAdManager.swift; sourceTree = "<group>"; };
|
||||||
|
33A6D387585D55B3F340F5DB /* Pods_PlayBTopOn.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PlayBTopOn.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
6297C68F5F2E4537B6CB3D1C /* Pods-PlayBTopOn.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayBTopOn.debug.xcconfig"; path = "Target Support Files/Pods-PlayBTopOn/Pods-PlayBTopOn.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
755ADA1E2D2D25C600C9D994 /* getIphone.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = getIphone.swift; sourceTree = "<group>"; };
|
||||||
|
755ADA1F2D2D25C600C9D994 /* idfa.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = idfa.swift; sourceTree = "<group>"; };
|
||||||
|
75F8FFCD2CE7233B008E8DF6 /* PlayBTopOn.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PlayBTopOn.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
75F8FFD02CE7233B008E8DF6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
75F8FFD42CE7233B008E8DF6 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||||
|
75F8FFD72CE7233B008E8DF6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
|
75F8FFD92CE72340008E8DF6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
75F8FFDC2CE72340008E8DF6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
|
75F8FFDE2CE72340008E8DF6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
75F8FFE52CE723FE008E8DF6 /* YL_PlayVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = YL_PlayVC.xib; sourceTree = "<group>"; };
|
||||||
|
75F8FFE62CE723FF008E8DF6 /* YL_PlayVC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YL_PlayVC.swift; sourceTree = "<group>"; };
|
||||||
|
75F8FFEE2CE7250B008E8DF6 /* MyWallPaperHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyWallPaperHeader.h; sourceTree = "<group>"; };
|
||||||
|
75F8FFEF2CE7250B008E8DF6 /* MyWallpaperPCH.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MyWallpaperPCH.pch; sourceTree = "<group>"; };
|
||||||
|
75F8FFF12CE72555008E8DF6 /* initializationTopOn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = initializationTopOn.m; sourceTree = "<group>"; };
|
||||||
|
75F8FFF22CE72555008E8DF6 /* initializationTopOn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = initializationTopOn.h; sourceTree = "<group>"; };
|
||||||
|
75F8FFF62CE72B7D008E8DF6 /* YL_NetWorkManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YL_NetWorkManager.swift; sourceTree = "<group>"; };
|
||||||
|
B423D6A110C2422F79FE6615 /* Pods-PlayBTopOn.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PlayBTopOn.release.xcconfig"; path = "Target Support Files/Pods-PlayBTopOn/Pods-PlayBTopOn.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
75F8FFCA2CE7233B008E8DF6 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
84921A6E873B758EF39EBDFA /* Pods_PlayBTopOn.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
049B446B2DACAB6D0005EB66 /* GCD */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
049B44692DACAB6D0005EB66 /* GCDAsyncUdpSocket.h */,
|
||||||
|
049B446A2DACAB6D0005EB66 /* GCDAsyncUdpSocket.m */,
|
||||||
|
);
|
||||||
|
path = GCD;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFC42CE7233B008E8DF6 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFCF2CE7233B008E8DF6 /* PlayBTopOn */,
|
||||||
|
75F8FFCE2CE7233B008E8DF6 /* Products */,
|
||||||
|
CFE0CCAD1DCDC6DF946C8994 /* Pods */,
|
||||||
|
EC17E36934C0C7C23F86C29A /* Frameworks */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFCE2CE7233B008E8DF6 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFCD2CE7233B008E8DF6 /* PlayBTopOn.app */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFCF2CE7233B008E8DF6 /* PlayBTopOn */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFF02CE7250B008E8DF6 /* Header */,
|
||||||
|
75F8FFE42CE723E7008E8DF6 /* playB */,
|
||||||
|
75F8FFD02CE7233B008E8DF6 /* AppDelegate.swift */,
|
||||||
|
75F8FFD42CE7233B008E8DF6 /* ViewController.swift */,
|
||||||
|
75F8FFD62CE7233B008E8DF6 /* Main.storyboard */,
|
||||||
|
75F8FFD92CE72340008E8DF6 /* Assets.xcassets */,
|
||||||
|
75F8FFDB2CE72340008E8DF6 /* LaunchScreen.storyboard */,
|
||||||
|
75F8FFDE2CE72340008E8DF6 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = PlayBTopOn;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFE42CE723E7008E8DF6 /* playB */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
049B44682DACAB6D0005EB66 /* CocoaAsyncSocket.h */,
|
||||||
|
049B446B2DACAB6D0005EB66 /* GCD */,
|
||||||
|
049B446C2DACAB6D0005EB66 /* XUDPClient.h */,
|
||||||
|
049B446D2DACAB6D0005EB66 /* XUDPClient.m */,
|
||||||
|
049B446E2DACAB6D0005EB66 /* bbbAdManager.swift */,
|
||||||
|
755ADA1E2D2D25C600C9D994 /* getIphone.swift */,
|
||||||
|
755ADA1F2D2D25C600C9D994 /* idfa.swift */,
|
||||||
|
75F8FFF62CE72B7D008E8DF6 /* YL_NetWorkManager.swift */,
|
||||||
|
75F8FFF22CE72555008E8DF6 /* initializationTopOn.h */,
|
||||||
|
75F8FFF12CE72555008E8DF6 /* initializationTopOn.m */,
|
||||||
|
75F8FFE62CE723FF008E8DF6 /* YL_PlayVC.swift */,
|
||||||
|
75F8FFE52CE723FE008E8DF6 /* YL_PlayVC.xib */,
|
||||||
|
);
|
||||||
|
path = playB;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFF02CE7250B008E8DF6 /* Header */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFEE2CE7250B008E8DF6 /* MyWallPaperHeader.h */,
|
||||||
|
75F8FFEF2CE7250B008E8DF6 /* MyWallpaperPCH.pch */,
|
||||||
|
);
|
||||||
|
path = Header;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
CFE0CCAD1DCDC6DF946C8994 /* Pods */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
6297C68F5F2E4537B6CB3D1C /* Pods-PlayBTopOn.debug.xcconfig */,
|
||||||
|
B423D6A110C2422F79FE6615 /* Pods-PlayBTopOn.release.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Pods;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
EC17E36934C0C7C23F86C29A /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33A6D387585D55B3F340F5DB /* Pods_PlayBTopOn.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
75F8FFCC2CE7233B008E8DF6 /* PlayBTopOn */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 75F8FFE12CE72340008E8DF6 /* Build configuration list for PBXNativeTarget "PlayBTopOn" */;
|
||||||
|
buildPhases = (
|
||||||
|
9FD2AE384D5FEDF5FF939DD1 /* [CP] Check Pods Manifest.lock */,
|
||||||
|
75F8FFC92CE7233B008E8DF6 /* Sources */,
|
||||||
|
75F8FFCA2CE7233B008E8DF6 /* Frameworks */,
|
||||||
|
75F8FFCB2CE7233B008E8DF6 /* Resources */,
|
||||||
|
C0554906157B58199E7A6576 /* [CP] Copy Pods Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = PlayBTopOn;
|
||||||
|
productName = PlayBTopOn;
|
||||||
|
productReference = 75F8FFCD2CE7233B008E8DF6 /* PlayBTopOn.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
75F8FFC52CE7233B008E8DF6 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
BuildIndependentTargetsInParallel = 1;
|
||||||
|
LastSwiftUpdateCheck = 1530;
|
||||||
|
LastUpgradeCheck = 1530;
|
||||||
|
TargetAttributes = {
|
||||||
|
75F8FFCC2CE7233B008E8DF6 = {
|
||||||
|
CreatedOnToolsVersion = 15.3;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 75F8FFC82CE7233B008E8DF6 /* Build configuration list for PBXProject "PlayBTopOn" */;
|
||||||
|
compatibilityVersion = "Xcode 14.0";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 75F8FFC42CE7233B008E8DF6;
|
||||||
|
productRefGroup = 75F8FFCE2CE7233B008E8DF6 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
75F8FFCC2CE7233B008E8DF6 /* PlayBTopOn */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
75F8FFCB2CE7233B008E8DF6 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
75F8FFDA2CE72340008E8DF6 /* Assets.xcassets in Resources */,
|
||||||
|
75F8FFE82CE723FF008E8DF6 /* YL_PlayVC.xib in Resources */,
|
||||||
|
75F8FFDD2CE72340008E8DF6 /* Base in Resources */,
|
||||||
|
75F8FFD82CE7233B008E8DF6 /* Base in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
9FD2AE384D5FEDF5FF939DD1 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
|
);
|
||||||
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Pods-PlayBTopOn-checkManifestLockResult.txt",
|
||||||
|
);
|
||||||
|
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";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
C0554906157B58199E7A6576 /* [CP] Copy Pods Resources */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-PlayBTopOn/Pods-PlayBTopOn-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Copy Pods Resources";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-PlayBTopOn/Pods-PlayBTopOn-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PlayBTopOn/Pods-PlayBTopOn-resources.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
75F8FFC92CE7233B008E8DF6 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
75F8FFF72CE72B7D008E8DF6 /* YL_NetWorkManager.swift in Sources */,
|
||||||
|
755ADA212D2D25C600C9D994 /* idfa.swift in Sources */,
|
||||||
|
75F8FFF32CE72555008E8DF6 /* initializationTopOn.m in Sources */,
|
||||||
|
049B446F2DACAB6D0005EB66 /* GCDAsyncUdpSocket.m in Sources */,
|
||||||
|
049B44702DACAB6D0005EB66 /* bbbAdManager.swift in Sources */,
|
||||||
|
049B44712DACAB6D0005EB66 /* XUDPClient.m in Sources */,
|
||||||
|
75F8FFE92CE723FF008E8DF6 /* YL_PlayVC.swift in Sources */,
|
||||||
|
75F8FFD52CE7233B008E8DF6 /* ViewController.swift in Sources */,
|
||||||
|
755ADA202D2D25C600C9D994 /* getIphone.swift in Sources */,
|
||||||
|
75F8FFD12CE7233B008E8DF6 /* AppDelegate.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
75F8FFD62CE7233B008E8DF6 /* Main.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFD72CE7233B008E8DF6 /* Base */,
|
||||||
|
);
|
||||||
|
name = Main.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
75F8FFDB2CE72340008E8DF6 /* LaunchScreen.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
75F8FFDC2CE72340008E8DF6 /* Base */,
|
||||||
|
);
|
||||||
|
name = LaunchScreen.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
75F8FFDF2CE72340008E8DF6 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
||||||
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
75F8FFE02CE72340008E8DF6 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_COMMA = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 17.4;
|
||||||
|
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
SDKROOT = iphoneos;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
VALIDATE_PRODUCT = YES;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
75F8FFE22CE72340008E8DF6 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 6297C68F5F2E4537B6CB3D1C /* Pods-PlayBTopOn.debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CODE_SIGNING_ALLOWED = NO;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 33FNMTSNA6;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
GCC_PREFIX_HEADER = "$(SRCROOT)/PlayBTopOn/Header/MyWallpaperPCH.pch";
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = PlayBTopOn/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "{DisplayName}";
|
||||||
|
INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties.";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = {Version};
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = {BundleId};
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = smart;
|
||||||
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/PlayBTopOn/Header/MyWallPaperHeader.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
75F8FFE32CE72340008E8DF6 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = B423D6A110C2422F79FE6615 /* Pods-PlayBTopOn.release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
CODE_SIGNING_ALLOWED = NO;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEVELOPMENT_TEAM = "";
|
||||||
|
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 33FNMTSNA6;
|
||||||
|
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||||
|
GCC_PREFIX_HEADER = "$(SRCROOT)/PlayBTopOn/Header/MyWallpaperPCH.pch";
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = PlayBTopOn/Info.plist;
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = "{DisplayName}";
|
||||||
|
INFOPLIST_KEY_NSUserTrackingUsageDescription = "\"\" needs to request tracking permissions to provide a personalized advertising experience. We respect and protect your privacy and will not sell your data to third parties.";
|
||||||
|
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
|
||||||
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
||||||
|
INFOPLIST_KEY_UIMainStoryboardFile = Main;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
|
||||||
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = {Version};
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = {BundleId};
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = smart;
|
||||||
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
SUPPORTS_MACCATALYST = NO;
|
||||||
|
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||||
|
SWIFT_COMPILATION_MODE = singlefile;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "$(SRCROOT)/PlayBTopOn/Header/MyWallPaperHeader.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 1;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
75F8FFC82CE7233B008E8DF6 /* Build configuration list for PBXProject "PlayBTopOn" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
75F8FFDF2CE72340008E8DF6 /* Debug */,
|
||||||
|
75F8FFE02CE72340008E8DF6 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
75F8FFE12CE72340008E8DF6 /* Build configuration list for PBXNativeTarget "PlayBTopOn" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
75F8FFE22CE72340008E8DF6 /* Debug */,
|
||||||
|
75F8FFE32CE72340008E8DF6 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 75F8FFC52CE7233B008E8DF6 /* Project object */;
|
||||||
|
}
|
||||||
7
topon/template/PlayBTopOn/PlayBTopOn.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
topon/template/PlayBTopOn/PlayBTopOn.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "self:">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
Binary file not shown.
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>PlayBTopOn.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>11</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>SchemeUserState</key>
|
||||||
|
<dict>
|
||||||
|
<key>PlayBTopOn.xcscheme_^#shared#^_</key>
|
||||||
|
<dict>
|
||||||
|
<key>orderHint</key>
|
||||||
|
<integer>8</integer>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
10
topon/template/PlayBTopOn/PlayBTopOn.xcworkspace/contents.xcworkspacedata
generated
Normal file
10
topon/template/PlayBTopOn/PlayBTopOn.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:PlayBTopOn.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
Binary file not shown.
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bucket
|
||||||
|
uuid = "F580337E-D970-439A-865D-31DED727615B"
|
||||||
|
type = "0"
|
||||||
|
version = "2.0">
|
||||||
|
</Bucket>
|
||||||
Binary file not shown.
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Bucket
|
||||||
|
uuid = "2E5813EB-D56F-4286-86F7-D2DFA67869D4"
|
||||||
|
type = "0"
|
||||||
|
version = "2.0">
|
||||||
|
</Bucket>
|
||||||
41
topon/template/PlayBTopOn/PlayBTopOn/AppDelegate.swift
Normal file
41
topon/template/PlayBTopOn/PlayBTopOn/AppDelegate.swift
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
//
|
||||||
|
// AppDelegate.swift
|
||||||
|
// PlayBTopOn
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/15.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
@main
|
||||||
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
|
static var shared: AppDelegate {
|
||||||
|
return UIApplication.shared.delegate as! AppDelegate
|
||||||
|
}
|
||||||
|
static let appid = UUID().uuidString
|
||||||
|
var window:UIWindow?
|
||||||
|
|
||||||
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||||
|
window = UIWindow()
|
||||||
|
window?.frame = UIScreen.main.bounds
|
||||||
|
NSLog("XS- app start:\(AppDelegate.appid)")
|
||||||
|
let vc = YL_PlayVC()
|
||||||
|
|
||||||
|
window?.rootViewController = UINavigationController(rootViewController: vc)
|
||||||
|
|
||||||
|
BbbAdManager.shared.initConfig()
|
||||||
|
|
||||||
|
BbbAdManager.shared.initAd()
|
||||||
|
window?.makeKeyAndVisible()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func applicationWillEnterForeground(_ application: UIApplication) {
|
||||||
|
print("应用从后台进入前台")
|
||||||
|
BbbAdManager.shared.closeAd(v: 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "h687603756335b.png",
|
||||||
|
"idiom" : "universal",
|
||||||
|
"platform" : "ios",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 179 KiB |
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="EHf-IW-A2E">
|
||||||
|
<objects>
|
||||||
|
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
<point key="canvasLocation" x="53" y="375"/>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
|
||||||
|
<dependencies>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<scenes>
|
||||||
|
<!--View Controller-->
|
||||||
|
<scene sceneID="tne-QT-ifu">
|
||||||
|
<objects>
|
||||||
|
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
|
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
|
||||||
|
</view>
|
||||||
|
</viewController>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
|
||||||
|
</objects>
|
||||||
|
</scene>
|
||||||
|
</scenes>
|
||||||
|
</document>
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// MyWallPaperHeader.h
|
||||||
|
// Mywallpaper
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/8/1.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef MyWallPaperHeader_h
|
||||||
|
#define MyWallPaperHeader_h
|
||||||
|
|
||||||
|
#import "initializationTopOn.h"
|
||||||
|
#import "XUDPClient.h"
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MyWallPaperHeader_h */
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
//
|
||||||
|
// MyWallpaperPCH.pch
|
||||||
|
// Mywallpaper
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/8/1.
|
||||||
|
//
|
||||||
|
#import "PlayBTopOn-Swift.h"
|
||||||
|
#ifndef MyWallpaperPCH_pch
|
||||||
|
#define MyWallpaperPCH_pch
|
||||||
|
|
||||||
|
// Include any system framework and library headers here that should be included in all compilation units.
|
||||||
|
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
|
||||||
|
|
||||||
|
#endif /* MyWallpaperPCH_pch */
|
||||||
555
topon/template/PlayBTopOn/PlayBTopOn/Info.plist
Normal file
555
topon/template/PlayBTopOn/PlayBTopOn/Info.plist
Normal file
@ -0,0 +1,555 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-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>LSApplicationQueriesSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>ctrip</string>
|
||||||
|
<string>pinduoduo</string>
|
||||||
|
<string>openapp.jdmobile</string>
|
||||||
|
<string>taobao</string>
|
||||||
|
<string>imeituan</string>
|
||||||
|
<string>iosamap</string>
|
||||||
|
<string>alipay</string>
|
||||||
|
<string>baiduboxapp</string>
|
||||||
|
<string>vipshop</string>
|
||||||
|
<string>tmall</string>
|
||||||
|
<string>meituanwaimai</string>
|
||||||
|
<string>kwai</string>
|
||||||
|
<string>snssdk1128</string>
|
||||||
|
<string>eleme</string>
|
||||||
|
<string>qunariphone</string>
|
||||||
|
<string>diditaxi</string>
|
||||||
|
<string>lianjiabeike</string>
|
||||||
|
<string>xhsdiscover</string>
|
||||||
|
<string>dianping</string>
|
||||||
|
<string>lianjia</string>
|
||||||
|
<string>ksnebula</string>
|
||||||
|
<string>sinaweibo</string>
|
||||||
|
<string>fleamarket</string>
|
||||||
|
<string>1641486558</string>
|
||||||
|
<string>id785385147</string>
|
||||||
|
<string>id959841854</string>
|
||||||
|
<string>id959841453</string>
|
||||||
|
<string>id959840394</string>
|
||||||
|
<string>id959841113</string>
|
||||||
|
<string>id387682726</string>
|
||||||
|
<string>id959841443</string>
|
||||||
|
<string>1094591345</string>
|
||||||
|
<string>id1094591345</string>
|
||||||
|
<string>id454434967</string>
|
||||||
|
<string>id594457652</string>
|
||||||
|
<string>id1182474649</string>
|
||||||
|
<string>id1617391485</string>
|
||||||
|
<string>id1567026344</string>
|
||||||
|
<string>suning</string>
|
||||||
|
<string>baiduhaokan</string>
|
||||||
|
<string>bdminivideo</string>
|
||||||
|
<string>baiduboxlite</string>
|
||||||
|
<string>baiduboxmission</string>
|
||||||
|
<string>zhihu</string>
|
||||||
|
<string>wireless1688</string>
|
||||||
|
<string>iqiyi</string>
|
||||||
|
<string>weixin</string>
|
||||||
|
<string>qihooloan</string>
|
||||||
|
<string>weishi</string>
|
||||||
|
<string>travelguide</string>
|
||||||
|
<string>wbmain</string>
|
||||||
|
<string>taobaotravel</string>
|
||||||
|
<string>alipays</string>
|
||||||
|
<string>youku</string>
|
||||||
|
<string>openjdlite</string>
|
||||||
|
<string>cainiao</string>
|
||||||
|
<string>kaola</string>
|
||||||
|
<string>OneTravel</string>
|
||||||
|
</array>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
<key>SKAdNetworkItems</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>kbd757ywx3.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mls7yz5dvl.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4fzdc2evr5.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4pfyvq9l8r.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ydx93a7ass.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cg4yq2srnc.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>p78axxw29g.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>737z793b9f.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v72qych5uu.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6xzpu9s2p8.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ludvb6z3bs.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mlmmfzh3r3.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>c6k4g5qg8m.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>wg4vff78zm.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>523jb4fst2.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ggvn48r87g.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>22mmun2rn5.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3sh42y64q3.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f38h382jlk.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>24t9a8vw3c.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>hs6bdukanm.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>prcb7njmu6.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>m8dbw4sv7c.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9nlqeag3gk.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cj5566h2ga.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cstr6suwn9.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>w9q455wk68.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>wzmmz9fp6w.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>yclnxrl5pm.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4468km3ulz.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>t38b2kh725.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>k674qkevps.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7ug5zh24hu.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5lm9lj6jb7.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9rd848q2bz.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7rz58n8ntl.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4w7y6s5ca2.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>feyaarzu9v.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ejvt5qm6ak.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9t245vhmpl.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n9x2a789qt.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>44jx6755aq.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>zmvfpc5aq8.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>tl55sbb4fm.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>2u9pt9hc89.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5a6flpkh64.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>8s468mfl3y.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>glqzh8vgby.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>av6w8kgt66.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>klf5c3l5u5.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>dzg6xy7pwj.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>y45688jllp.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>hdw39hrw9y.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ppxm28t8ap.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>424m5254lk.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5l3tpt7t6e.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>uw77j35x4d.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>4dzt52r2t5.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mtkv5xtk9e.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>gta9lk7p23.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>5tjdwbrq8w.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3rd42ekr43.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>g28c52eehv.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>su67r6k2v3.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>rx5hdcabgc.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>2fnua5tdw4.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>32z4fx6l9h.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>xy9t38ct57.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>54nzkqm89y.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9b89h5y424.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>pwa73g5rt2.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>79pbpufp6p.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>kbmxgpxpgc.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>275upjj5gd.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>rvh3l7un93.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>qqp299437r.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>294l99pt4k.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>74b6s63p6l.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>44n7hlldy6.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6p4ks3rnbw.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f73kdq92p3.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>e5fvkxwrpn.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>97r2b46745.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3qcr597p9d.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>578prtvx9j.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n6fk4nfna4.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>b9bk5wbcq9.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>84993kbrcf.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>24zw6aqk47.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>pwdxu55a5a.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cs644xg564.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6964rsfnh4.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9vvzujtq5s.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>a7xqa6mtl2.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>r45fhb6rf7.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>c3frkrj4fj.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6g9af3uyq4.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>u679fj5vs4.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>g2y4y55b64.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>zq492l623r.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>a8cz6cu7e5.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>s39g8k73mm.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>dbu4b84rxf.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mj797d8u6f.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>v9wttpbfk9.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>ns5j362hk7.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mqn7fxpca7.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>252b5q8x7y.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>3qy4746246.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>6yxyv74ff7.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7fmhfwg9en.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>cwn433xbcr.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>f7s53z58qe.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>vhf287vqwu.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>x44k69ngh6.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>mp6xlyr22a.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>7953jerfzd.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>qu637u8glc.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>9yg77x724h.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
<dict>
|
||||||
|
<key>SKAdNetworkIdentifier</key>
|
||||||
|
<string>n66cz3y3bx.skadnetwork</string>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
19
topon/template/PlayBTopOn/PlayBTopOn/ViewController.swift
Normal file
19
topon/template/PlayBTopOn/PlayBTopOn/ViewController.swift
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// ViewController.swift
|
||||||
|
// PlayBTopOn
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/15.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class ViewController: UIViewController {
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
// Do any additional setup after loading the view.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
19
topon/template/PlayBTopOn/PlayBTopOn/playB/CocoaAsyncSocket.h
Executable file
19
topon/template/PlayBTopOn/PlayBTopOn/playB/CocoaAsyncSocket.h
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// CocoaAsyncSocket.h
|
||||||
|
// CocoaAsyncSocket
|
||||||
|
//
|
||||||
|
// Created by Derek Clarkson on 10/08/2015.
|
||||||
|
// CocoaAsyncSocket project is in the public domain.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
//! Project version number for CocoaAsyncSocket.
|
||||||
|
FOUNDATION_EXPORT double cocoaAsyncSocketVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for CocoaAsyncSocket.
|
||||||
|
FOUNDATION_EXPORT const unsigned char cocoaAsyncSocketVersionString[];
|
||||||
|
|
||||||
|
|
||||||
|
#import "GCD/GCDAsyncUdpSocket.h"
|
||||||
|
|
||||||
1036
topon/template/PlayBTopOn/PlayBTopOn/playB/GCD/GCDAsyncUdpSocket.h
Executable file
1036
topon/template/PlayBTopOn/PlayBTopOn/playB/GCD/GCDAsyncUdpSocket.h
Executable file
File diff suppressed because it is too large
Load Diff
5632
topon/template/PlayBTopOn/PlayBTopOn/playB/GCD/GCDAsyncUdpSocket.m
Executable file
5632
topon/template/PlayBTopOn/PlayBTopOn/playB/GCD/GCDAsyncUdpSocket.m
Executable file
File diff suppressed because it is too large
Load Diff
27
topon/template/PlayBTopOn/PlayBTopOn/playB/XUDPClient.h
Normal file
27
topon/template/PlayBTopOn/PlayBTopOn/playB/XUDPClient.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
//
|
||||||
|
// XUDPClient.h
|
||||||
|
// xcmd
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/2/17.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef XUDPClient_h
|
||||||
|
#define XUDPClient_h
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import "CocoaAsyncSocket.h"
|
||||||
|
|
||||||
|
typedef void (^SendCallback) (NSString *msg);
|
||||||
|
|
||||||
|
@interface XUDPClient : NSObject<GCDAsyncUdpSocketDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, copy) SendCallback hintBlock;
|
||||||
|
|
||||||
|
|
||||||
|
+(instancetype)sharedInstance;
|
||||||
|
- (void) onShow: (NSDictionary *)data;
|
||||||
|
- (void) onEnd: (NSDictionary *)data;
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif /* XUDPClient_h */
|
||||||
143
topon/template/PlayBTopOn/PlayBTopOn/playB/XUDPClient.m
Normal file
143
topon/template/PlayBTopOn/PlayBTopOn/playB/XUDPClient.m
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
//
|
||||||
|
// XUDPClient.m
|
||||||
|
// xcmd
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/2/17.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
#import "XUDPClient.h"
|
||||||
|
|
||||||
|
#define HOST @"127.0.0.1"
|
||||||
|
#define PORT 6001
|
||||||
|
|
||||||
|
|
||||||
|
@interface XUDPClient() {
|
||||||
|
@private
|
||||||
|
GCDAsyncUdpSocket *_udpSocket;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@implementation XUDPClient
|
||||||
|
+(instancetype)sharedInstance
|
||||||
|
{
|
||||||
|
static XUDPClient* _sharedInstance = nil;
|
||||||
|
static dispatch_once_t oncePredicate;
|
||||||
|
dispatch_once (&oncePredicate, ^{
|
||||||
|
_sharedInstance = [[XUDPClient alloc] init];
|
||||||
|
});
|
||||||
|
return _sharedInstance;
|
||||||
|
}
|
||||||
|
-(instancetype)init {
|
||||||
|
if (self = [super init]) {
|
||||||
|
[self start];
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) start
|
||||||
|
{
|
||||||
|
if (!_udpSocket)
|
||||||
|
{
|
||||||
|
_udpSocket=nil;
|
||||||
|
}
|
||||||
|
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
|
||||||
|
_udpSocket = [[GCDAsyncUdpSocket alloc]initWithDelegate:self delegateQueue:queue];
|
||||||
|
NSError *error = nil;
|
||||||
|
if (![_udpSocket bindToPort:0 error:&error])
|
||||||
|
{
|
||||||
|
NSLog(@"Error binding: %@", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (![_udpSocket beginReceiving:&error])
|
||||||
|
{
|
||||||
|
NSLog(@"Error receiving: %@", error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (void) close
|
||||||
|
{
|
||||||
|
if(_udpSocket) {
|
||||||
|
[_udpSocket closeAfterSending];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- (NSString *)dic2Json: (NSDictionary *)dict {
|
||||||
|
NSError *error;
|
||||||
|
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict
|
||||||
|
options:NSJSONWritingPrettyPrinted
|
||||||
|
error:&error];
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"dic2json err:%@", error);
|
||||||
|
}
|
||||||
|
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onShow: (NSDictionary *)data {
|
||||||
|
NSDictionary *rq = @{
|
||||||
|
@"url": @"/adtask/show",
|
||||||
|
@"body": data
|
||||||
|
};
|
||||||
|
[self send:[self dic2Json: rq]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) onEnd: (NSDictionary *)data {
|
||||||
|
NSDictionary *rq = @{
|
||||||
|
@"url": @"/adtask/end",
|
||||||
|
@"body": data
|
||||||
|
};
|
||||||
|
[self send:[self dic2Json: rq]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void) send: (NSString*) msg {
|
||||||
|
NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
[_udpSocket sendData:data toHost:HOST port:PORT withTimeout:-1 tag:300];
|
||||||
|
}
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address
|
||||||
|
{
|
||||||
|
NSError *error = nil;
|
||||||
|
NSLog(@"Message didConnectToAddress: %@",[[NSString alloc]initWithData:address encoding:NSUTF8StringEncoding]);
|
||||||
|
[_udpSocket beginReceiving:&error];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didNotConnect:(NSError *)error
|
||||||
|
{
|
||||||
|
NSLog(@"Message didNotConnect: %@",error);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error
|
||||||
|
{
|
||||||
|
NSLog(@"Message didNotSendDataWithTag: %@",error);
|
||||||
|
}
|
||||||
|
|
||||||
|
- (NSDictionary *) json2dic: (NSString *) jsstr {
|
||||||
|
NSError *jsonError;
|
||||||
|
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:[jsstr dataUsingEncoding:NSUTF8StringEncoding]
|
||||||
|
options:NSJSONReadingMutableContainers
|
||||||
|
error:&jsonError];
|
||||||
|
if (jsonError) {
|
||||||
|
NSLog(@"json2dic error: %@", jsonError);
|
||||||
|
}
|
||||||
|
return dic;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext
|
||||||
|
{
|
||||||
|
NSString *revDada =[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
|
||||||
|
NSLog(@"Message didReceiveData :%@", revDada);
|
||||||
|
if(self.hintBlock) {
|
||||||
|
self.hintBlock(revDada);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)udpSocket:(GCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag
|
||||||
|
{
|
||||||
|
NSLog(@"Message 发送成功");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@end
|
||||||
1362
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_NetWorkManager.swift
Normal file
1362
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_NetWorkManager.swift
Normal file
File diff suppressed because it is too large
Load Diff
155
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_PlayVC.swift
Normal file
155
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_PlayVC.swift
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
//
|
||||||
|
// YL_PlayVC.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/11/5.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import AnyThinkInterstitial
|
||||||
|
class YL_PlayVC: UIViewController {
|
||||||
|
|
||||||
|
@IBOutlet weak var textSDKView: UITextView!
|
||||||
|
@IBOutlet weak var bundleIdLab: UILabel!
|
||||||
|
@IBOutlet weak var deviceIdLab: UILabel!
|
||||||
|
@IBOutlet weak var ipLab: UILabel!
|
||||||
|
@IBOutlet weak var idfaLab: UILabel!
|
||||||
|
@IBOutlet weak var ad1Lab: UILabel!
|
||||||
|
@IBOutlet weak var ad2Lab: UILabel!
|
||||||
|
@IBOutlet weak var ad3Lab: UILabel!
|
||||||
|
|
||||||
|
private var observation: NSKeyValueObservation?
|
||||||
|
|
||||||
|
private var observationis: NSKeyValueObservation?
|
||||||
|
|
||||||
|
var openADTimer:Timer?
|
||||||
|
let kOpenADPerSec: CGFloat = 0.1 // 假设的秒数
|
||||||
|
let kOpenAdCTimeLength: CGFloat = 30 // 假设的超时时长
|
||||||
|
|
||||||
|
static var totalTimeC: CGFloat = 0.0
|
||||||
|
var firstShow = true
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
BbbAdManager.shared.loadAd(view:self)
|
||||||
|
let bundleId = Bundle.main.bundleIdentifier ?? ""
|
||||||
|
bundleIdLab.text = "Name:\(bundleId)"
|
||||||
|
let deviceId = BbbAdManager.config.adbrush_deviceid ?? ""
|
||||||
|
deviceIdLab.text = "DeviceID:\(deviceId)"
|
||||||
|
let locIp = BbbAdManager.config.adbrush_localip ?? ""
|
||||||
|
let remoteIp = BbbAdManager.config.remouteIP
|
||||||
|
ipLab.text = "LocIP:\(locIp),RemoteIp:\(remoteIp)"
|
||||||
|
|
||||||
|
if #available(iOS 14, *) {
|
||||||
|
IDFA.shared.checkATT { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
self.idfaLab.text = "IDFA:\(idfa)"
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IDFA.shared.getIDFAForOlderVersions { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
print("IDFA: \(idfa)")
|
||||||
|
self.idfaLab.text = "IDFA:\(idfa)"
|
||||||
|
} else {
|
||||||
|
print("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BbbAdManager.shared.start()
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
if (!firstShow) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
firstShow = false
|
||||||
|
|
||||||
|
ad1Lab.text = BbbAdManager.config.adids[0]
|
||||||
|
ad2Lab.text = BbbAdManager.config.adids[1]
|
||||||
|
ad3Lab.text = BbbAdManager.config.adids[2]
|
||||||
|
|
||||||
|
|
||||||
|
self.navigationController?.navigationBar.isHidden = true
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(addTextToTextView), name: NSNotification.Name("adinfo"), object: nil)
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(adStatusChange), name: NSNotification.Name("adStatus"), object: nil)
|
||||||
|
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "adbrush_base_url:\(BbbAdManager.config.adbrush_base_url),adbrush_deviceid:\(String(describing: BbbAdManager.config.adbrush_deviceid)),adbrush_localip:\(String(describing: BbbAdManager.config.adbrush_localip)),adbrush_local_url:\(BbbAdManager.config.adbrush_local_url),adbrush_ecpm:\(BbbAdManager.config.adbrush_ecpm)"])
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func addTextToTextView(notification: Notification) {
|
||||||
|
if let newText = notification.userInfo?["text"] as? String {
|
||||||
|
// 正确的方式
|
||||||
|
DispatchQueue.global().async {
|
||||||
|
// 后台线程处理数据
|
||||||
|
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
// 主线程更新UI
|
||||||
|
self.textSDKView.text.append("\(newText)\n\n")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 向文本末尾追加 100 行空白行
|
||||||
|
func appendExtraLines1() {
|
||||||
|
let extraLines = String(repeating: "\n", count: 100)
|
||||||
|
let currentText = textSDKView.text ?? ""
|
||||||
|
|
||||||
|
// 检查末尾是否已经有额外行,避免重复追加
|
||||||
|
if !currentText.hasSuffix(extraLines) {
|
||||||
|
textSDKView.text = currentText.trimmingCharacters(in: .whitespacesAndNewlines) + extraLines
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@objc func adStatusChange(notification: Notification) {
|
||||||
|
if let newText = notification.userInfo?["text"] as? String, let id = notification.userInfo?["id"] as? String {
|
||||||
|
var lab = ad1Lab
|
||||||
|
if id == BbbAdManager.config.adids[1] {
|
||||||
|
lab = ad2Lab
|
||||||
|
} else if id == BbbAdManager.config.adids[2] {
|
||||||
|
lab = ad3Lab
|
||||||
|
}
|
||||||
|
DispatchQueue.global().async {
|
||||||
|
// 后台线程处理数据
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
// 主线程更新UI
|
||||||
|
lab?.text = "\(id):\(newText)" }
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
NotificationCenter.default.removeObserver(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Notification.Name {
|
||||||
|
static let adStatusChanged = Notification.Name("adStatusChanged")
|
||||||
|
|
||||||
|
}
|
||||||
113
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_PlayVC.xib
Normal file
113
topon/template/PlayBTopOn/PlayBTopOn/playB/YL_PlayVC.xib
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
|
||||||
|
<device id="retina4_7" orientation="portrait" appearance="light"/>
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="iOS"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
|
||||||
|
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||||
|
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="YL_PlayVC" customModule="PlayBTopOn" customModuleProvider="target">
|
||||||
|
<connections>
|
||||||
|
<outlet property="ad1Lab" destination="8pI-KB-RPz" id="8gK-jO-9UZ"/>
|
||||||
|
<outlet property="ad2Lab" destination="hYm-nF-cOH" id="qND-g7-RRo"/>
|
||||||
|
<outlet property="ad3Lab" destination="qR0-SE-dDl" id="SX0-6w-Hbl"/>
|
||||||
|
<outlet property="bundleIdLab" destination="uzL-Gm-nJe" id="PLT-mH-rhM"/>
|
||||||
|
<outlet property="deviceIdLab" destination="afH-me-Sl0" id="cTn-FZ-z8s"/>
|
||||||
|
<outlet property="idfaLab" destination="DOY-uf-pQH" id="wh7-A3-jFy"/>
|
||||||
|
<outlet property="ipLab" destination="ahK-Kk-DtA" id="oe0-Rs-OLS"/>
|
||||||
|
<outlet property="textSDKView" destination="vmc-eE-E2h" id="Pil-hd-AvH"/>
|
||||||
|
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
|
||||||
|
</connections>
|
||||||
|
</placeholder>
|
||||||
|
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||||
|
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||||
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
|
<subviews>
|
||||||
|
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="ZCJ-fb-TIS">
|
||||||
|
<rect key="frame" x="1" y="21" width="373" height="645"/>
|
||||||
|
<subviews>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="bundleIdLab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uzL-Gm-nJe">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="373" height="21.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
|
||||||
|
<nil key="textColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="deviceIdLab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="afH-me-Sl0">
|
||||||
|
<rect key="frame" x="0.0" y="21.5" width="373" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemBlueColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="idfaLab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DOY-uf-pQH">
|
||||||
|
<rect key="frame" x="0.0" y="41" width="373" height="20.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" systemColor="systemPinkColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ipLab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ahK-Kk-DtA">
|
||||||
|
<rect key="frame" x="0.0" y="61.5" width="373" height="20.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
|
<color key="textColor" systemColor="systemGreenColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad1Lab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8pI-KB-RPz">
|
||||||
|
<rect key="frame" x="0.0" y="82" width="373" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad2Lab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hYm-nF-cOH">
|
||||||
|
<rect key="frame" x="0.0" y="101.5" width="373" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ad3Lab" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qR0-SE-dDl">
|
||||||
|
<rect key="frame" x="0.0" y="121" width="373" height="19.5"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
|
<color key="textColor" systemColor="systemOrangeColor"/>
|
||||||
|
<nil key="highlightedColor"/>
|
||||||
|
</label>
|
||||||
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" editable="NO" textAlignment="natural" selectable="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vmc-eE-E2h">
|
||||||
|
<rect key="frame" x="0.0" y="140.5" width="373" height="504.5"/>
|
||||||
|
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||||
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
</textView>
|
||||||
|
</subviews>
|
||||||
|
</stackView>
|
||||||
|
</subviews>
|
||||||
|
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
|
||||||
|
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||||
|
<constraints>
|
||||||
|
<constraint firstItem="ZCJ-fb-TIS" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" constant="1" id="DhW-gV-Eip"/>
|
||||||
|
<constraint firstAttribute="trailing" secondItem="ZCJ-fb-TIS" secondAttribute="trailing" constant="1" id="Mbh-GB-cWt"/>
|
||||||
|
<constraint firstAttribute="bottom" secondItem="ZCJ-fb-TIS" secondAttribute="bottom" constant="1" id="Rxy-Zg-zNH"/>
|
||||||
|
<constraint firstItem="ZCJ-fb-TIS" firstAttribute="top" secondItem="fnl-2z-Ty3" secondAttribute="top" constant="1" id="fDq-DA-QtM"/>
|
||||||
|
</constraints>
|
||||||
|
<point key="canvasLocation" x="128.98550724637681" y="-12.053571428571429"/>
|
||||||
|
</view>
|
||||||
|
</objects>
|
||||||
|
<resources>
|
||||||
|
<systemColor name="systemBackgroundColor">
|
||||||
|
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemBlueColor">
|
||||||
|
<color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemGreenColor">
|
||||||
|
<color red="0.20392156859999999" green="0.78039215689999997" blue="0.34901960780000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemOrangeColor">
|
||||||
|
<color red="1" green="0.58431372550000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
<systemColor name="systemPinkColor">
|
||||||
|
<color red="1" green="0.1764705882" blue="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
|
</systemColor>
|
||||||
|
</resources>
|
||||||
|
</document>
|
||||||
549
topon/template/PlayBTopOn/PlayBTopOn/playB/bbbAdManager.swift
Normal file
549
topon/template/PlayBTopOn/PlayBTopOn/playB/bbbAdManager.swift
Normal file
@ -0,0 +1,549 @@
|
|||||||
|
//
|
||||||
|
// bbbAdManager.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by mac on 2025/3/11.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import AnyThinkInterstitial
|
||||||
|
import AnyThinkSDK
|
||||||
|
|
||||||
|
class bConfig: NSObject {
|
||||||
|
var appId:String = "{appId}"
|
||||||
|
/// 广告Key
|
||||||
|
var adKey:String = "{adKey}"
|
||||||
|
|
||||||
|
/// 广告数组
|
||||||
|
var allAdIds:[String] = [{allAdIds}]
|
||||||
|
/// 广告数组
|
||||||
|
var adids:[String] = []
|
||||||
|
///设备ID
|
||||||
|
var adbrush_deviceid:String?
|
||||||
|
///最低ecpm
|
||||||
|
var adbrush_ecpm:Double = 0.0005
|
||||||
|
/// 本地ip
|
||||||
|
var adbrush_localip:String?
|
||||||
|
/// A面load show
|
||||||
|
var adbrush_base_url:String = "http://192.168.9.11:8080"
|
||||||
|
/// 本地服务
|
||||||
|
var adbrush_local_url:String = "http://127.0.0.1:6000"
|
||||||
|
|
||||||
|
/// 远程ip
|
||||||
|
var remouteIP:String = ""
|
||||||
|
/// dataId
|
||||||
|
var dataId:String = ""
|
||||||
|
|
||||||
|
///IDFA
|
||||||
|
var idfa:String = ""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
var washParam:Bool = false
|
||||||
|
///
|
||||||
|
var linkId:String = ""
|
||||||
|
|
||||||
|
///load次数
|
||||||
|
var loadcount:Int = 0
|
||||||
|
///load次数
|
||||||
|
var loadcount1:Int = 0
|
||||||
|
|
||||||
|
var ipTime:Int = 0
|
||||||
|
|
||||||
|
override init() {
|
||||||
|
super.init()
|
||||||
|
|
||||||
|
if self.allAdIds.count > 3 {
|
||||||
|
self.adids = Array(self.allAdIds.shuffled().prefix(3))
|
||||||
|
} else {
|
||||||
|
self.adids = self.allAdIds
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
///是否正在展示中
|
||||||
|
@objc dynamic var isadsureshow:Bool = false
|
||||||
|
|
||||||
|
|
||||||
|
func getRandomString() -> String? {
|
||||||
|
return adids.randomElement()
|
||||||
|
}
|
||||||
|
// 判断当前是否为广告不量模式
|
||||||
|
func isADSSMode() -> Bool {
|
||||||
|
// return true
|
||||||
|
return UserDefaults.standard.bool(forKey: "kLuxSSFaceKey")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AdItem :NSObject, ATInterstitialDelegate {
|
||||||
|
|
||||||
|
|
||||||
|
func didFinishLoadingAD(withPlacementID placementID: String!) {
|
||||||
|
BbbAdManager.config.loadcount1 += 1
|
||||||
|
NSLog("XS- didFinishLoadingAD\(String(describing: placementID))")
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载广告1: \(String(describing: placementID)) 成功 - \(BbbAdManager.config.loadcount1)"])
|
||||||
|
changeStatus(st: 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// var interstitialAd:MAInterstitialAd!
|
||||||
|
var interstitialAdID: String = ""
|
||||||
|
|
||||||
|
var retryAttempt = 0.0
|
||||||
|
|
||||||
|
// 定义广告关闭后的操作闭包
|
||||||
|
var _onAdClosed: (() -> Void)?
|
||||||
|
var onStatusChange:((_:String,_:Int, _:Double) -> Void)?
|
||||||
|
|
||||||
|
var startLoadTime: DispatchTime?
|
||||||
|
|
||||||
|
// 0: 初始,1:加载中,2:加载完成,3:展示中,4:关闭,5:加载失败,6:展示失败
|
||||||
|
private(set) var status: Int = 0
|
||||||
|
|
||||||
|
private(set) var ecpm:Double = 0.0
|
||||||
|
|
||||||
|
|
||||||
|
init(adID:String){
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
self.interstitialAdID = adID
|
||||||
|
// loadInterstitialAd()
|
||||||
|
|
||||||
|
}
|
||||||
|
func onAdClosed() {
|
||||||
|
if self._onAdClosed != nil {
|
||||||
|
self._onAdClosed!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func changeStatus(st:Int) {
|
||||||
|
self.status = st
|
||||||
|
onStatusChange?(self.interstitialAdID, st, self.ecpm)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func loadInterstitialAd(){
|
||||||
|
NSLog("XS- placementIDLoad 1: ---- \(interstitialAdID)")
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text":"begin load:\(interstitialAdID)"])
|
||||||
|
|
||||||
|
startLoadTime = DispatchTime.now()
|
||||||
|
changeStatus(st: 1)
|
||||||
|
let extra: [String: Any] = [
|
||||||
|
kATAdLoadingExtraMediaExtraKey: "custom_values"
|
||||||
|
]
|
||||||
|
|
||||||
|
ATAdManager.shared().loadAD(withPlacementID: interstitialAdID, extra: extra, delegate: self)
|
||||||
|
NSLog("XS- placementIDLoad 2: ---- \(interstitialAdID)")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func showAd(viewController:UIViewController, onAdClosed: @escaping () -> Void) -> Bool{
|
||||||
|
self._onAdClosed = onAdClosed
|
||||||
|
NSLog("XS- onAdClosed set: \(self._onAdClosed != nil)")
|
||||||
|
if ATAdManager.shared().interstitialReady(forPlacementID: interstitialAdID) {
|
||||||
|
ATAdManager.shared().showInterstitial(withPlacementID: interstitialAdID, in: viewController, delegate: self)
|
||||||
|
NSLog("XS- placementIDShow : ---- \(interstitialAdID)")
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
NSLog("XS- interstitialAdID no redy 插页广告尚未准备好")
|
||||||
|
// retryLoadAdIfNecessary()
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func to_network(_ network: Int) -> String {
|
||||||
|
switch network {
|
||||||
|
case 6:
|
||||||
|
return "Mintegral"
|
||||||
|
case 11:
|
||||||
|
return "Ironsource"
|
||||||
|
case 12:
|
||||||
|
return "UnityAds"
|
||||||
|
case 13:
|
||||||
|
return "Vungle"
|
||||||
|
case 50:
|
||||||
|
return "Pangle"
|
||||||
|
default:
|
||||||
|
return "Mintegral"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 完成加载广告
|
||||||
|
func didFinishBiddingADSource(withPlacementID placementID: String!,extra: [AnyHashable : Any]?) {
|
||||||
|
|
||||||
|
BbbAdManager.config.loadcount += 1
|
||||||
|
|
||||||
|
|
||||||
|
var thatecpm = 0.0
|
||||||
|
if let adsourcePriceValue = extra?["adsource_price"] as? NSNumber {
|
||||||
|
thatecpm = Double(Float(truncating: adsourcePriceValue) / 1000)
|
||||||
|
} else {
|
||||||
|
NSLog("XS- not get type adsource_price or type not match")
|
||||||
|
}
|
||||||
|
if thatecpm > self.ecpm {
|
||||||
|
self.ecpm = thatecpm
|
||||||
|
}
|
||||||
|
NSLog("XS- ad load ok:\(BbbAdManager.config.linkId) - \(String(describing: placementID)) ecpm:\(self.ecpm * 1000)")
|
||||||
|
// 计算并打印加载时间
|
||||||
|
var time = 0
|
||||||
|
if let startTime = startLoadTime {
|
||||||
|
let loadDuration = calculateElapsedTime(since: startTime)
|
||||||
|
NSLog("XS- ad \(String(describing: placementID)) load time: \(loadDuration) ms")
|
||||||
|
time = loadDuration
|
||||||
|
}
|
||||||
|
|
||||||
|
let networkID:Int = extra?["network_firm_id"] as! Int
|
||||||
|
let network = to_network(networkID)
|
||||||
|
let country = extra?["country"] ?? ""
|
||||||
|
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载广告: \(String(describing: placementID)) 成功 - \(network), ecpm:\(String(format: "%.2f", self.ecpm * 1000)) \(country) \(BbbAdManager.config.loadcount)"])
|
||||||
|
retryAttempt = 0 // 重置重试次数
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Load(adid: placementID, ecpm: thatecpm , network: network, countryCode: country as! String, platformResponseTime: TimeInterval(time/1000) , dsp: "MTG", loadTime: time)
|
||||||
|
}
|
||||||
|
// 发布广告加载成功通知
|
||||||
|
// NotificationCenter.default.post(name: .adDidLoad, object: nil, userInfo: ["adId": ad.adUnitIdentifier])
|
||||||
|
// changeStatus(st: 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
func didFailBiddingADSource(withPlacementID placementID: String!,extra: [AnyHashable : Any]?, error: (any Error)!) {
|
||||||
|
// BbbAdManager.config.loadcount += 1
|
||||||
|
NSLog("XS- load \(String(describing: placementID)) err.... :\(String(describing: error))")
|
||||||
|
/*
|
||||||
|
var time = 0
|
||||||
|
|
||||||
|
if let startTime = startLoadTime {
|
||||||
|
let loadDuration = calculateElapsedTime(since: startTime)
|
||||||
|
NSLog("XS- ad \(String(describing: placementID)) load time: \(loadDuration) ms")
|
||||||
|
time = loadDuration
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Load(adid: placementID, ecpm: 0.0 , network: "", countryCode: "", platformResponseTime: TimeInterval(time/1000) , dsp: "MTG", loadTime: time,errMsg: "\(String(describing: error))")
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "bidding error:\(String(describing: placementID) ),\(String(describing: error)) 失败"])
|
||||||
|
// self.onAdClosed()
|
||||||
|
// changeStatus(st: 5)
|
||||||
|
}
|
||||||
|
|
||||||
|
func didFailToLoadAD(withPlacementID placementID: String!, error: (any Error)!) {
|
||||||
|
BbbAdManager.config.loadcount += 1
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载:\(String(describing: placementID) ),\(String(describing: error)) 失败"])
|
||||||
|
NSLog("XS- load\(String(describing: placementID)) err.... :\(String(describing: error))")
|
||||||
|
// NotificationCenter.default.post(name: .adDidFailToLoad, object: nil, userInfo: ["adId": adUnitIdentifier])
|
||||||
|
var time = 0
|
||||||
|
if let startTime = startLoadTime {
|
||||||
|
let loadDuration = calculateElapsedTime(since: startTime)
|
||||||
|
NSLog("XS- ad \(String(describing: placementID)) load time: \(loadDuration) ms")
|
||||||
|
time = loadDuration
|
||||||
|
}
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Load(adid: placementID, ecpm: 0.0 , network: "", countryCode: "", platformResponseTime: TimeInterval(time/1000) , dsp: "MTG", loadTime: time,errMsg: "\(String(describing: error))")
|
||||||
|
}
|
||||||
|
// self.onAdClosed()
|
||||||
|
changeStatus(st: 5)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
func didFailToLoadADSource(withPlacementID placementID: String!,extra: [AnyHashable : Any]?, error: (any Error)!) {
|
||||||
|
BbbAdManager.config.loadcount += 1
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "加载:\(String(describing: placementID) ),\(String(describing: error)) 失败"])
|
||||||
|
NSLog("XS- load\(String(describing: placementID)) err.... :\(String(describing: error))")
|
||||||
|
// NotificationCenter.default.post(name: .adDidFailToLoad, object: nil, userInfo: ["adId": adUnitIdentifier])
|
||||||
|
var thatecpm = 0.0
|
||||||
|
if let adsourcePriceValue = extra?["adsource_price"] as? NSNumber{
|
||||||
|
thatecpm = Double(Float(truncating: adsourcePriceValue) / 1000)
|
||||||
|
} else {
|
||||||
|
NSLog("XS- not get type adsource_price or type not match")
|
||||||
|
}
|
||||||
|
// self.ecpm = thatecpm
|
||||||
|
|
||||||
|
// 计算并打印加载时间
|
||||||
|
var time = 0
|
||||||
|
if let startTime = startLoadTime {
|
||||||
|
let loadDuration = calculateElapsedTime(since: startTime)
|
||||||
|
NSLog("广告 \(String(describing: placementID)) 加载时间: \(loadDuration) ms")
|
||||||
|
time = loadDuration
|
||||||
|
}
|
||||||
|
|
||||||
|
let networkID:Int = extra?["network_firm_id"] as! Int
|
||||||
|
let network = to_network(networkID)
|
||||||
|
let country = extra?["country"] ?? ""
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Load(adid: placementID, ecpm: thatecpm , network: network, countryCode: country as! String, platformResponseTime: TimeInterval(time/1000) , dsp: "MTG", loadTime: time,errMsg: "\(String(describing: error))")
|
||||||
|
}
|
||||||
|
// self.onAdClosed()
|
||||||
|
changeStatus(st: 5)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 展示广告
|
||||||
|
func interstitialDidShow(forPlacementID placementID: String, extra: [AnyHashable : Any]) {
|
||||||
|
NSLog("XS- show ok ad\(placementID)")
|
||||||
|
// NotificationCenter.default.post(name: .adDidDisplay, object: nil, userInfo: ["adId": ad.adUnitIdentifier])
|
||||||
|
|
||||||
|
// let currentIDFV = UIDevice.current.identifierForVendor?.uuidString
|
||||||
|
var ecpmprice: Double?
|
||||||
|
if let adsourcePriceValue = extra["adsource_price"] as? NSNumber{
|
||||||
|
|
||||||
|
ecpmprice = Double(Float(truncating: adsourcePriceValue)) / 1000
|
||||||
|
|
||||||
|
} else {
|
||||||
|
NSLog("XS- not get type adsource_price or type not match")
|
||||||
|
}
|
||||||
|
|
||||||
|
let networkID = extra["network_firm_id"] as! Int
|
||||||
|
let network = to_network(networkID)
|
||||||
|
let country = extra["country"] ?? ""
|
||||||
|
// let currentIDFV = UIDevice.current.identifierForVendor?.uuidString
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.showAd(adId: placementID, ecpm: ecpmprice, ad: true) {
|
||||||
|
self?.changeStatus(st: 4)
|
||||||
|
NSLog("XS- close ad ok\(placementID)")
|
||||||
|
self?.onAdClosed()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DispatchQueue.global(qos: .utility).async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.uploadAD_Show(adid: placementID, ecpm: ecpmprice ?? 0.0, network: network, countryCode: country as! String, platformResponseTime:0 , dsp: "MTG")
|
||||||
|
}
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "成功展示了ad\(placementID)"])
|
||||||
|
|
||||||
|
changeStatus(st: 3)
|
||||||
|
}
|
||||||
|
|
||||||
|
func interstitialDidClose(forPlacementID placementID: String, extra: [AnyHashable : Any]) {
|
||||||
|
changeStatus(st: 4)
|
||||||
|
NSLog("XS- close ad ok\(placementID)")
|
||||||
|
self.onAdClosed()
|
||||||
|
}
|
||||||
|
|
||||||
|
func interstitialDidClick(forPlacementID placementID: String, extra: [AnyHashable: Any]) {
|
||||||
|
NSLog("XS- ad click ok\(placementID)")
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
func didFail(toDisplay ad: MAAd, withError error: MAError) {
|
||||||
|
changeStatus(st: 6)
|
||||||
|
print("展示广告\(ad.adUnitIdentifier),\(error)失败")
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "展示广告\(ad.adUnitIdentifier),\(error)失败"])
|
||||||
|
self.onAdClosed!()
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
// 辅助函数以毫秒为单位计算经过的时间
|
||||||
|
private func calculateElapsedTime(since startTime: DispatchTime) -> Int {
|
||||||
|
let endTime = DispatchTime.now()
|
||||||
|
let nanoseconds = endTime.uptimeNanoseconds - startTime.uptimeNanoseconds
|
||||||
|
return Int(nanoseconds / 1_000_000) // 转换为毫秒
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class BbbAdManager: NSObject {
|
||||||
|
static let shared = BbbAdManager()
|
||||||
|
static let config = bConfig()
|
||||||
|
|
||||||
|
///是否正在展示中
|
||||||
|
@objc dynamic var isshow:Bool = false
|
||||||
|
|
||||||
|
// 用于存储多个广告位的管理器,Key 是广告位的 ID
|
||||||
|
private var adItems: [String: AdItem] = [:]
|
||||||
|
|
||||||
|
var openADTimer:Timer?
|
||||||
|
let kOpenADPerSec: CGFloat = 1 // 假设的秒数
|
||||||
|
let kOpenAdCTimeLength: CGFloat = 60 // 假设的超时时长
|
||||||
|
private var view:UIViewController?
|
||||||
|
|
||||||
|
static var totalTimeC: CGFloat = 0.0
|
||||||
|
|
||||||
|
var isLoaded = false
|
||||||
|
|
||||||
|
// 添加广告位管理器
|
||||||
|
func add(adId: String) {
|
||||||
|
let adManager = AdItem(adID: adId)
|
||||||
|
adManager.onStatusChange = {id, st, ecpm in
|
||||||
|
// 0: 初始,1:加载中,2:加载完成,3:展示中,4:关闭,5:加载失败,6:展示失败
|
||||||
|
var text = "初始"
|
||||||
|
if st == 1 {
|
||||||
|
text = "加载中"
|
||||||
|
} else if st == 2 {
|
||||||
|
text = "加载完成"
|
||||||
|
}
|
||||||
|
else if st == 3 {
|
||||||
|
text = "展示中"
|
||||||
|
}
|
||||||
|
else if st == 4 {
|
||||||
|
text = "关闭"
|
||||||
|
}
|
||||||
|
else if st == 5 {
|
||||||
|
text = "加载失败"
|
||||||
|
}
|
||||||
|
else if st == 6 {
|
||||||
|
text = "展示失败"
|
||||||
|
}
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adStatus"), object: nil, userInfo: ["id": id, "text":"\(text),ecpm:\(String(format: "%.2f", ecpm * 1000))"])
|
||||||
|
}
|
||||||
|
adItems[adId] = adManager
|
||||||
|
adManager.loadInterstitialAd()
|
||||||
|
}
|
||||||
|
|
||||||
|
override init(){
|
||||||
|
|
||||||
|
super.init()
|
||||||
|
if BbbAdManager.config.isADSSMode() {
|
||||||
|
self.initConfig()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func initConfig () {
|
||||||
|
if #available(iOS 14, *) {
|
||||||
|
IDFA.shared.checkATT { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
NSLog("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
} else {
|
||||||
|
NSLog("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
IDFA.shared.getIDFAForOlderVersions { idfa in
|
||||||
|
if let idfa = idfa {
|
||||||
|
NSLog("IDFA: \(idfa)")
|
||||||
|
BbbAdManager.config.idfa = idfa
|
||||||
|
} else {
|
||||||
|
NSLog("无法获取 IDFA")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let bfaceDict = UserDefaults.standard.dictionary(forKey: "bfaceDictKey"){
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_base_url = bfaceDict["adbrush_base_url"] as? String ?? "http://192.168.9.11:8080"
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_deviceid = bfaceDict["adbrush_deviceid"] as? String ?? ""
|
||||||
|
BbbAdManager.config.adbrush_localip = bfaceDict["adbrush_localip"] as? String ?? ""
|
||||||
|
BbbAdManager.config.remouteIP = bfaceDict["remouteIP"] as? String ?? ""
|
||||||
|
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_local_url = bfaceDict["adbrush_local_url"] as? String ?? "http://127.0.0.1:6000"
|
||||||
|
BbbAdManager.config.dataId = bfaceDict["dataId"] as? String ?? ""
|
||||||
|
|
||||||
|
|
||||||
|
BbbAdManager.config.adbrush_ecpm = bfaceDict["adbrush_ecpm"] as? Double ?? 0.005
|
||||||
|
BbbAdManager.config.linkId = bfaceDict["linkId"] as? String ?? ""
|
||||||
|
BbbAdManager.config.washParam = bfaceDict["washParam"] as? Bool ?? false
|
||||||
|
} else {
|
||||||
|
NotificationCenter.default.post(name: NSNotification.Name("adinfo"), object: nil, userInfo: ["text": "获取字典失败"])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initAd() {
|
||||||
|
NSLog("XS- init ad")
|
||||||
|
initializationTopOn.toponeSDK(BbbAdManager.config.appId,appKey: BbbAdManager.config.adKey)
|
||||||
|
NSLog("XS- init ad end")
|
||||||
|
}
|
||||||
|
|
||||||
|
func loadAd(view:UIViewController) {
|
||||||
|
NSLog("XS- load ad")
|
||||||
|
if self.isLoaded {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.isLoaded = true
|
||||||
|
self.view = view
|
||||||
|
if BbbAdManager.config.washParam == true{
|
||||||
|
for (_, adId) in BbbAdManager.config.adids.enumerated() {
|
||||||
|
|
||||||
|
BbbAdManager.shared.add(adId: adId)
|
||||||
|
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
for (_, adId) in BbbAdManager.config.adids.enumerated() {
|
||||||
|
NSLog("XS- ad load start:\(BbbAdManager.config.linkId) - \(adId)")
|
||||||
|
BbbAdManager.shared.add(adId: adId)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NSLog("XS- load ad")
|
||||||
|
}
|
||||||
|
func start() {
|
||||||
|
guard openADTimer == nil else { return }
|
||||||
|
openADTimer = Timer.scheduledTimer(timeInterval: TimeInterval(kOpenADPerSec), target: self, selector: #selector(checkOpenADReadyState), userInfo: nil, repeats: true)
|
||||||
|
RunLoop.current.add(openADTimer!, forMode: .common)
|
||||||
|
}
|
||||||
|
func isEnd () -> Bool {
|
||||||
|
NSLog("XS- ad end")
|
||||||
|
if(self.isshow) {
|
||||||
|
NSLog("XS- ad end 1")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for (_, ad) in BbbAdManager.shared.adItems {
|
||||||
|
if(ad.status == 1) {
|
||||||
|
NSLog("XS- ad end 2")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if (ad.status == 2 && ad.ecpm >= BbbAdManager.config.adbrush_ecpm) {
|
||||||
|
NSLog("XS- ad end 3")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NSLog("XS- ad end 4")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
func showAd(v:UIViewController) {
|
||||||
|
if(self.isshow == false) {
|
||||||
|
for (_, ad) in BbbAdManager.shared.adItems {
|
||||||
|
NSLog("XS- ad info:\(ad.interstitialAdID), ecpm:\(ad.ecpm * 1000)")
|
||||||
|
if (ad.status == 2 && ad.ecpm >= BbbAdManager.config.adbrush_ecpm) {
|
||||||
|
self.isshow = ad.showAd(viewController: v) { [weak self] in
|
||||||
|
NSLog("XS- ad close")
|
||||||
|
self!.isshow = false
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func closeAd(v:Int) {
|
||||||
|
initializationTopOn.removeADVC(byDelayTime: v, onclose:{
|
||||||
|
for (_, ad) in BbbAdManager.shared.adItems {
|
||||||
|
if(ad.status == 3) {
|
||||||
|
ad.changeStatus(st: 4)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
self.isshow = false
|
||||||
|
}
|
||||||
|
|
||||||
|
@objc func checkOpenADReadyState(){
|
||||||
|
BbbAdManager.totalTimeC += kOpenADPerSec
|
||||||
|
|
||||||
|
if (self.isEnd() && BbbAdManager.totalTimeC > 8) || BbbAdManager.totalTimeC >= kOpenAdCTimeLength {
|
||||||
|
openADTimer?.invalidate()
|
||||||
|
openADTimer = nil
|
||||||
|
DispatchQueue.global().async { [weak self] in
|
||||||
|
guard self != nil else { return }
|
||||||
|
YL_NetWorkManager.loadend(max_ecpm: 0)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if self.isshow == false{
|
||||||
|
self.showAd(v: self.view!)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
154
topon/template/PlayBTopOn/PlayBTopOn/playB/getIphone.swift
Normal file
154
topon/template/PlayBTopOn/PlayBTopOn/playB/getIphone.swift
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
//
|
||||||
|
// getIphone.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/12/31.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
class getIpne {
|
||||||
|
static var shard = getIpne()
|
||||||
|
private init() {}
|
||||||
|
|
||||||
|
func getIPhoneModel() -> iPhoneModel {
|
||||||
|
var systemInfo = utsname()
|
||||||
|
uname(&systemInfo)
|
||||||
|
|
||||||
|
let machineMirror = Mirror(reflecting: systemInfo.machine)
|
||||||
|
let identifier = machineMirror.children.reduce("") { identifier, element in
|
||||||
|
guard let value = element.value as? Int8, value != 0 else { return identifier }
|
||||||
|
return identifier + String(UnicodeScalar(UInt8(value)))
|
||||||
|
}
|
||||||
|
|
||||||
|
switch identifier {
|
||||||
|
case "iPhone5,1", "iPhone5,2": return .iPhone5
|
||||||
|
case "iPhone5,3", "iPhone5,4": return .iPhone5C
|
||||||
|
case "iPhone6,1", "iPhone6,2": return .iPhone5S
|
||||||
|
case "iPhone7.2": return .iPhone6
|
||||||
|
case "iPhone7,1": return .iPhone6Plus
|
||||||
|
case "iPhone8,1": return .iPhone6s
|
||||||
|
case "iPhone8,2": return .iPhone6Plus
|
||||||
|
case "iPhone8,4": return .iPhoneSE1
|
||||||
|
case "iPhone9,1", "iPhone9,3": return .iPhone7
|
||||||
|
case "iPhone9,2", "iPhone9,4": return .iPhone7Plus
|
||||||
|
case "iPhone10,1", "iPhone10,4": return .iPhone8
|
||||||
|
case "iPhone10,2", "iPhone10,5": return .iPhone8Plus
|
||||||
|
case "iPhone10,3", "iPhone10,6": return .iPhoneX
|
||||||
|
case "iPhone11,8": return .iPhoneXR
|
||||||
|
case "iPhone11,2": return .iPhoneXS
|
||||||
|
case "iPhone11,6", "iPhone11,4": return .iPhoneXSMax
|
||||||
|
case "iPhone12,1": return .iPhone11
|
||||||
|
case "iPhone12,3": return .iPhone11Pro
|
||||||
|
case "iPhone12,5": return .iPhone11ProMax
|
||||||
|
case "iPhone12,8": return .iPhoneSE2
|
||||||
|
case "iPhone13,1": return .iPhone12Mini
|
||||||
|
case "iPhone13,2": return .iPhone12
|
||||||
|
case "iPhone13,3": return .iPhone12Pro
|
||||||
|
case "iPhone13,4": return .iPhone12ProMax
|
||||||
|
case "iPhone14,4": return .iPhone13Mini
|
||||||
|
case "iPhone14,5": return .iPhone13
|
||||||
|
case "iPhone14,2": return .iPhone13Pro
|
||||||
|
case "iPhone14,3": return .iPhone13ProMax
|
||||||
|
case "iPhone14,6": return .iPhoneSE3
|
||||||
|
case "iPhone14,7": return .iPhone14
|
||||||
|
case "iPhone14,8": return .iPhone14Plus
|
||||||
|
case "iPhone15,2": return .iPhone14Pro
|
||||||
|
case "iPhone15,3": return .iPhone14ProMax
|
||||||
|
case "iPhone15,4": return .iPhone15
|
||||||
|
case "iPhone15,5": return .iPhone15Plus
|
||||||
|
case "iPhone16,1": return .iPhone15Pro
|
||||||
|
case "iPhone16,2": return .iPhone15ProMax
|
||||||
|
case "i386": return .simulator
|
||||||
|
case "x86_64": return .simulator
|
||||||
|
default: return .unknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum iPhoneModel {
|
||||||
|
case iPhone15
|
||||||
|
case iPhone15Plus
|
||||||
|
case iPhone15Pro
|
||||||
|
case iPhone15ProMax
|
||||||
|
case iPhone14
|
||||||
|
case iPhone14Plus
|
||||||
|
case iPhone14Pro
|
||||||
|
case iPhone14ProMax
|
||||||
|
case iPhone13ProMax
|
||||||
|
case iPhone13Pro
|
||||||
|
case iPhone13
|
||||||
|
case iPhone13Mini
|
||||||
|
case iPhone12ProMax
|
||||||
|
case iPhone12Pro
|
||||||
|
case iPhone12
|
||||||
|
case iPhone12Mini
|
||||||
|
case iPhone11ProMax
|
||||||
|
case iPhone11Pro
|
||||||
|
case iPhone11
|
||||||
|
case iPhoneXSMax
|
||||||
|
case iPhoneXS
|
||||||
|
case iPhoneXR
|
||||||
|
case iPhoneX
|
||||||
|
case iPhone8Plus
|
||||||
|
case iPhone8
|
||||||
|
case iPhone7Plus
|
||||||
|
case iPhone7
|
||||||
|
case iPhone6sPlus
|
||||||
|
case iPhone6s
|
||||||
|
case iPhone6Plus
|
||||||
|
case iPhone6
|
||||||
|
case iPhone5S
|
||||||
|
case iPhone5C
|
||||||
|
case iPhone5
|
||||||
|
case iPhoneSE3
|
||||||
|
case iPhoneSE2
|
||||||
|
case iPhoneSE1
|
||||||
|
case simulator
|
||||||
|
case unknown
|
||||||
|
|
||||||
|
public func getName() -> String {
|
||||||
|
switch self {
|
||||||
|
case .iPhone5: return "iPhone 5"
|
||||||
|
case .iPhone5C: return "iPhone 5C"
|
||||||
|
case .iPhone5S: return "iPhone 5S"
|
||||||
|
case .iPhone6: return "iPhone 6"
|
||||||
|
case .iPhone6Plus: return "iPhone 6 Plus"
|
||||||
|
case .iPhone6s: return "iPhone 6s"
|
||||||
|
case .iPhone6sPlus: return "iPhone 6s Plus"
|
||||||
|
case .iPhoneSE1: return "iPhone SE1"
|
||||||
|
case .iPhone7: return "iPhone 7"
|
||||||
|
case .iPhone7Plus: return "iPhone 7 Plus"
|
||||||
|
case .iPhone8: return "iPhone 8"
|
||||||
|
case .iPhone8Plus: return "iPhone 8 Plus"
|
||||||
|
case .iPhoneX: return "iPhone X"
|
||||||
|
case .iPhoneXR: return "iPhone XR"
|
||||||
|
case .iPhoneXS: return "iPhone XS"
|
||||||
|
case .iPhoneXSMax: return "iPhone XS Max"
|
||||||
|
case .iPhone11: return "iPhone 11"
|
||||||
|
case .iPhone11Pro: return "iPhone 11 Pro"
|
||||||
|
case .iPhone11ProMax: return "iPhone 11 Pro Max"
|
||||||
|
case .iPhoneSE2: return "iPhone SE2"
|
||||||
|
case .iPhone12Mini: return "iPhone 12 mini"
|
||||||
|
case .iPhone12: return "iPhone 12"
|
||||||
|
case .iPhone12Pro: return "iPhone 12 Pro"
|
||||||
|
case .iPhone12ProMax: return "iPhone 12 Pro Max"
|
||||||
|
case .iPhone13Mini: return "iPhone 13 mini"
|
||||||
|
case .iPhone13: return "iPhone 13"
|
||||||
|
case .iPhone13Pro: return "iPhone 13 Pro"
|
||||||
|
case .iPhone13ProMax: return "iPhone 13 Pro Max"
|
||||||
|
case .simulator: return "Simulator"
|
||||||
|
case .unknown: return "unknown"
|
||||||
|
case .iPhone14: return "iPhone 14"
|
||||||
|
case .iPhone14Plus: return "iPhone 14 Plus"
|
||||||
|
case .iPhone14Pro: return "iPhone 14 Pro"
|
||||||
|
case .iPhone14ProMax: return "iPhone 14 Pro Max"
|
||||||
|
case .iPhoneSE3: return "iPhone SE3"
|
||||||
|
case .iPhone15: return "iPhone 15"
|
||||||
|
case .iPhone15Plus: return "iPhone 15 Plus"
|
||||||
|
case .iPhone15Pro: return "iPhone 15 Pro"
|
||||||
|
case .iPhone15ProMax: return "iPhone 15 Pro Max"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
96
topon/template/PlayBTopOn/PlayBTopOn/playB/idfa.swift
Normal file
96
topon/template/PlayBTopOn/PlayBTopOn/playB/idfa.swift
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
//
|
||||||
|
// idfa.swift
|
||||||
|
// playbtest
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/12/31.
|
||||||
|
//
|
||||||
|
|
||||||
|
import AdSupport
|
||||||
|
import AppTrackingTransparency
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
class IDFA {
|
||||||
|
static let shared = IDFA()
|
||||||
|
|
||||||
|
/// 检查并请求 ATT 授权
|
||||||
|
@available(iOS 14, *)
|
||||||
|
func checkATT(completion: @escaping (String?) -> Void) {
|
||||||
|
let status = ATTrackingManager.trackingAuthorizationStatus
|
||||||
|
switch status {
|
||||||
|
case .notDetermined:
|
||||||
|
// 请求授权
|
||||||
|
ATTrackingManager.requestTrackingAuthorization { newStatus in
|
||||||
|
self.handleATTStatus(newStatus, completion: completion)
|
||||||
|
}
|
||||||
|
case .authorized, .denied, .restricted:
|
||||||
|
// 处理已有的状态
|
||||||
|
handleATTStatus(status, completion: completion)
|
||||||
|
@unknown default:
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// 处理 ATT 授权状态
|
||||||
|
@available(iOS 14, *)
|
||||||
|
private func handleATTStatus(
|
||||||
|
_ status: ATTrackingManager.AuthorizationStatus,
|
||||||
|
completion: @escaping (String?) -> Void
|
||||||
|
) {
|
||||||
|
switch status {
|
||||||
|
case .authorized:
|
||||||
|
// 用户已授权,获取 IDFA
|
||||||
|
let idfa = ASIdentifierManager.shared().advertisingIdentifier
|
||||||
|
.uuidString
|
||||||
|
completion(idfa)
|
||||||
|
// starManager.shared.idfa = idfa
|
||||||
|
case .denied, .restricted:
|
||||||
|
// 用户拒绝或受限,返回 nil
|
||||||
|
print("用户拒绝授权或功能受限")
|
||||||
|
completion(nil)
|
||||||
|
case .notDetermined:
|
||||||
|
// 不应该出现,预防性处理
|
||||||
|
print("授权状态仍未确定")
|
||||||
|
completion(nil)
|
||||||
|
@unknown default:
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getIDFAForOlderVersions(completion: @escaping (String?) -> Void) {
|
||||||
|
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
|
||||||
|
let idfa = ASIdentifierManager.shared().advertisingIdentifier
|
||||||
|
.uuidString
|
||||||
|
completion(idfa)
|
||||||
|
} else {
|
||||||
|
print("广告跟踪受限")
|
||||||
|
completion(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//func requestIDFA(completion: @escaping (String?) -> Void) {
|
||||||
|
// if #available(iOS 14.5, *) {
|
||||||
|
// // 检查跟踪授权状态
|
||||||
|
// ATTrackingManager.requestTrackingAuthorization { status in
|
||||||
|
// switch status {
|
||||||
|
// case .authorized:
|
||||||
|
// // 用户授权后,获取 IDFA
|
||||||
|
// let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
// completion(idfa)
|
||||||
|
// case .denied, .restricted, .notDetermined:
|
||||||
|
// // 用户拒绝、限制或未决定时,IDFA 将不可用
|
||||||
|
// completion(nil)
|
||||||
|
// @unknown default:
|
||||||
|
// completion(nil)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// // 对于 iOS 14.4 及以下版本,直接获取 IDFA
|
||||||
|
// if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
|
||||||
|
// let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||||
|
// completion(idfa)
|
||||||
|
// } else {
|
||||||
|
// completion(nil)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
@ -0,0 +1,34 @@
|
|||||||
|
//
|
||||||
|
// test.h
|
||||||
|
// wallpaper_project
|
||||||
|
//
|
||||||
|
// Created by 忆海16 on 2024/8/2.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <execinfo.h>
|
||||||
|
#import <dlfcn.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
typedef void (^OnClose) (void);
|
||||||
|
|
||||||
|
void post(id dic, NSString* p);
|
||||||
|
|
||||||
|
@interface initializationTopOn : NSObject
|
||||||
|
|
||||||
|
+(void)toponeSDK:(NSString*) appId appKey:(NSString*) appKey;
|
||||||
|
|
||||||
|
+ (void)closeADWindow;
|
||||||
|
|
||||||
|
+ (void)removeADVCByDelayTime:(NSInteger)delayTime onclose: (OnClose) onclose;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface CallStackHelper : NSObject
|
||||||
|
+ (void)printDetailedCallStack;
|
||||||
|
+ (NSArray *)getCallStackSymbols;
|
||||||
|
+ (NSString *)getCallStackString;
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
1034
topon/template/PlayBTopOn/PlayBTopOn/playB/initializationTopOn.m
Normal file
1034
topon/template/PlayBTopOn/PlayBTopOn/playB/initializationTopOn.m
Normal file
File diff suppressed because it is too large
Load Diff
18
topon/template/PlayBTopOn/Podfile
Normal file
18
topon/template/PlayBTopOn/Podfile
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Uncomment the next line to define a global platform for your project
|
||||||
|
# platform :ios, '9.0'
|
||||||
|
|
||||||
|
target 'PlayBTopOn' do
|
||||||
|
# Comment the next line if you don't want to use dynamic frameworks
|
||||||
|
use_frameworks!
|
||||||
|
|
||||||
|
# Pods for PlayBTopOn
|
||||||
|
# pod 'TPNiOS','6.3.66'
|
||||||
|
# pod 'TPNVungleSDKAdapter','6.3.66'
|
||||||
|
# pod 'TPNMintegralSDKAdapter','6.3.66'
|
||||||
|
|
||||||
|
pod 'TPNiOS','6.4.76'
|
||||||
|
pod 'TPNVungleSDKAdapter','6.4.76'
|
||||||
|
pod 'TPNIronSourceSDKAdapter','6.4.76'
|
||||||
|
pod 'TPNMintegralSDKAdapter','6.4.76'
|
||||||
|
|
||||||
|
end
|
||||||
69
topon/template/PlayBTopOn/Podfile.lock
Normal file
69
topon/template/PlayBTopOn/Podfile.lock
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
PODS:
|
||||||
|
- IronSourceSDK (8.8.0.0)
|
||||||
|
- MintegralAdSDK/All (7.7.7):
|
||||||
|
- MintegralAdSDK/BannerAd
|
||||||
|
- MintegralAdSDK/BidNativeAd
|
||||||
|
- MintegralAdSDK/InterstitialVideoAd
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/NativeAdvancedAd
|
||||||
|
- MintegralAdSDK/NewInterstitialAd
|
||||||
|
- MintegralAdSDK/RewardVideoAd
|
||||||
|
- MintegralAdSDK/SplashAd
|
||||||
|
- MintegralAdSDK/BannerAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/BidNativeAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/InterstitialVideoAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/NativeAd (7.7.7)
|
||||||
|
- MintegralAdSDK/NativeAdvancedAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/NewInterstitialAd (7.7.7):
|
||||||
|
- MintegralAdSDK/InterstitialVideoAd
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/RewardVideoAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- MintegralAdSDK/SplashAd (7.7.7):
|
||||||
|
- MintegralAdSDK/NativeAd
|
||||||
|
- TPNiOS (6.4.76):
|
||||||
|
- TPNiOS/TPNSDK (= 6.4.76)
|
||||||
|
- TPNiOS/TPNSDK (6.4.76)
|
||||||
|
- TPNIronSourceSDKAdapter (6.4.76):
|
||||||
|
- IronSourceSDK (= 8.8.0.0)
|
||||||
|
- TPNiOS (= 6.4.76)
|
||||||
|
- TPNMintegralSDKAdapter (6.4.76):
|
||||||
|
- MintegralAdSDK/All (= 7.7.7)
|
||||||
|
- TPNiOS (= 6.4.76)
|
||||||
|
- TPNVungleSDKAdapter (6.4.76):
|
||||||
|
- TPNiOS (= 6.4.76)
|
||||||
|
- VungleAds (= 7.5.0)
|
||||||
|
- VungleAds (7.5.0)
|
||||||
|
|
||||||
|
DEPENDENCIES:
|
||||||
|
- TPNiOS (= 6.4.76)
|
||||||
|
- TPNIronSourceSDKAdapter (= 6.4.76)
|
||||||
|
- TPNMintegralSDKAdapter (= 6.4.76)
|
||||||
|
- TPNVungleSDKAdapter (= 6.4.76)
|
||||||
|
|
||||||
|
SPEC REPOS:
|
||||||
|
trunk:
|
||||||
|
- IronSourceSDK
|
||||||
|
- MintegralAdSDK
|
||||||
|
- TPNiOS
|
||||||
|
- TPNIronSourceSDKAdapter
|
||||||
|
- TPNMintegralSDKAdapter
|
||||||
|
- TPNVungleSDKAdapter
|
||||||
|
- VungleAds
|
||||||
|
|
||||||
|
SPEC CHECKSUMS:
|
||||||
|
IronSourceSDK: ff0b14630899756847f7608a75182f10f022e5ef
|
||||||
|
MintegralAdSDK: 190c6cd3d83b31b51833e3341857c58dc430da2e
|
||||||
|
TPNiOS: 1b19f54b097912acf89dd41821605cc366432756
|
||||||
|
TPNIronSourceSDKAdapter: 632739c889c7a52174c8e3f5e912b99a2db489c0
|
||||||
|
TPNMintegralSDKAdapter: 67df075118c7268031c545b62e2216bba569cb22
|
||||||
|
TPNVungleSDKAdapter: 15aa9b622b4ab59eb7a9f95d5c052d674483b585
|
||||||
|
VungleAds: cb2aa4791ba4f341c6c026d44cc43eabe258890f
|
||||||
|
|
||||||
|
PODFILE CHECKSUM: c9db2b56d9c1cce1499e833f0872906ef776ba87
|
||||||
|
|
||||||
|
COCOAPODS: 1.16.2
|
||||||
BIN
topon/template/embedded.mobileprovision
Normal file
BIN
topon/template/embedded.mobileprovision
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user