first commit

This commit is contained in:
xsean 2025-10-15 10:58:21 +08:00
commit ff5e105937
87 changed files with 23002 additions and 0 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.DS_Store
Pods/
build/

51
build.py Normal file
View 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
View 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
View 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)

View 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>

Binary file not shown.

View 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

View 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 */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View 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>

View File

@ -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>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "F3D0305B-7F8F-4791-926A-868E7C1A17B1"
type = "0"
version = "2.0">
</Bucket>

View File

@ -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>

View 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)
}
}

View File

@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

View File

@ -0,0 +1,14 @@
{
"images" : [
{
"filename" : "1024x1024.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -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>

View 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>

View 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>

View 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"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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)
}
}

View 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 */

View 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

File diff suppressed because it is too large Load Diff

View 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)
}
}

View 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>

View 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?
/// Aload 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()
}
}
}

View 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

View 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

View 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 windows 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
}
}

View 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"
}
}
}
}

View 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)
// }
// }
//}

View 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 */

View File

@ -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"

View 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
View 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)

View 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>

View 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 */;
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View 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>

View File

@ -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>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "F580337E-D970-439A-865D-31DED727615B"
type = "0"
version = "2.0">
</Bucket>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "2E5813EB-D56F-4286-86F7-D2DFA67869D4"
type = "0"
version = "2.0">
</Bucket>

View 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);
}
}

View File

@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -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

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -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>

View 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>

View File

@ -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 */

View File

@ -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 */

View 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>

View 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.
}
}

View 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"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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 */

View 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

File diff suppressed because it is too large Load Diff

View 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")
}

View 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>

View 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?
/// Aload 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!)
}
}
}

View 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"
}
}
}
}

View 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)
// }
// }
//}

View File

@ -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

File diff suppressed because it is too large Load Diff

View 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

View 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

Binary file not shown.