Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PhoneManager
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Yang
PhoneManager
Commits
b5f7ddad
Commit
b5f7ddad
authored
May 27, 2025
by
shenyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
广告增加版本控制,广告管理类更换,删除无效资源
parent
86e200c3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
41 changed files
with
1187 additions
and
2333 deletions
+1187
-2333
project.pbxproj
PhoneManager.xcodeproj/project.pbxproj
+2
-4
AppDelegate.swift
PhoneManager/AppDelegate.swift
+7
-1
ADManager.swift
PhoneManager/Class/Manager/ADManager/ADManager.swift
+632
-0
ADModel.swift
PhoneManager/Class/Manager/ADManager/ADModel.swift
+63
-0
APIReportManager.swift
PhoneManager/Class/Manager/APIReport/APIReportManager.swift
+12
-9
PhotoManager.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
+108
-0
PhotoModel.swift
PhoneManager/Class/Manager/PMPhotoManager/PhotoModel.swift
+20
-0
SecretPhotoManager.swift
...ger/Class/Manager/PMPhotoManager/SecretPhotoManager.swift
+87
-0
AdvManager.swift
...Manager/Class/Page/Advertisement/Manager/AdvManager.swift
+9
-7
AdvTipDeleteView.swift
...ager/Class/Page/Advertisement/View/AdvTipDeleteView.swift
+1
-1
ChargeInfoViewController.swift
...ass/Page/Charge/Controller/ChargeInfoViewController.swift
+10
-4
CompressSelectCell.swift
...Manager/Class/Page/Compress/Cell/CompressSelectCell.swift
+22
-18
CompressQualityController.swift
.../Page/Compress/Controller/CompressQualityController.swift
+13
-7
PreViewController.swift
...er/Class/Page/Compress/Controller/PreViewController.swift
+1
-1
MergeButtonView.swift
...Manager/Class/Page/Contact/View/Dup/MergeButtonView.swift
+14
-7
MergePreButtonView.swift
...ager/Class/Page/Contact/View/Dup/MergePreButtonView.swift
+13
-7
HomeInfoViewController.swift
...r/Class/Page/Home/Controller/HomeInfoViewController.swift
+21
-5
HomePhotosDetailViewController.swift
...Page/Home/Controller/HomePhotosDetailViewController.swift
+12
-7
HomeVideoDetailController.swift
...lass/Page/Home/Controller/HomeVideoDetailController.swift
+15
-8
HomeViewController.swift
...nager/Class/Page/Home/Controller/HomeViewController.swift
+24
-21
PhotoRemoveViewController.swift
...lass/Page/Home/Controller/PhotoRemoveViewController.swift
+1
-1
PhotoSlideViewController.swift
...Class/Page/Home/Controller/PhotoSlideViewController.swift
+2
-2
HomePhotosModel .swift
...Manager/Class/Page/Home/View/Model/HomePhotosModel .swift
+0
-386
TrashSubView.swift
PhoneManager/Class/Page/Home/View/TrashSubView.swift
+18
-8
PermissionVC.swift
PhoneManager/Class/Page/Landing/PermissionVC.swift
+18
-16
SecretViewController.swift
PhoneManager/Class/Page/Secret/SecretViewController.swift
+1
-2
SettingViewController.swift
.../Page/Settings/ViewController/SettingViewController.swift
+29
-13
TrashViewController.swift
...ger/Class/Page/Trash/Controller/TrashViewController.swift
+17
-6
TrashDataManager.swift
...nager/Class/Page/Trash/DataManager/TrashDataManager.swift
+1
-1
chargingStart.png
PhoneManager/Class/Resource/Image/chargingStart.png
+0
-0
img_bj_start_1.png
PhoneManager/Class/Resource/Image/img_bj_start_1.png
+0
-0
img_star_start_2.png
PhoneManager/Class/Resource/Image/img_star_start_2.png
+0
-0
Resnet50.mlmodel
PhoneManager/Class/Resource/Model/Resnet50.mlmodel
+0
-0
EmailCleanListView.swift
...Manager/Class/Session/Email/View/EmailCleanListView.swift
+2
-1
EmailContentView.swift
PhoneManager/Class/Session/Email/View/EmailContentView.swift
+1
-1
PhotoAndVideoMananger.swift
...l/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
+0
-1413
PhotoSimilarOptimizer.swift
...l/Class/PhotoAndVideoMananger/PhotoSimilarOptimizer.swift
+0
-288
ResourceManager.swift
...ss/Tool/Class/PhotoAndVideoMananger/ResourceManager.swift
+0
-62
SystemCommentManager.swift
...ool/Class/SystemCommentManager/SystemCommentManager.swift
+1
-1
NSString+Extension.swift
...nager/Class/Tool/Extension.swift/NSString+Extension.swift
+9
-0
Singleton.swift
PhoneManager/Class/Tool/Singleton/Singleton.swift
+1
-25
No files found.
PhoneManager.xcodeproj/project.pbxproj
View file @
b5f7ddad
...
...
@@ -816,7 +816,7 @@
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_STYLE
=
Automatic
;
CURRENT_PROJECT_VERSION
=
2
;
CURRENT_PROJECT_VERSION
=
3
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
...
...
@@ -831,7 +831,6 @@
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIStatusBarStyle
=
""
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
...
...
@@ -865,7 +864,7 @@
CODE_SIGN_ENTITLEMENTS
=
PhoneManager/PhoneManager.entitlements
;
CODE_SIGN_IDENTITY
=
"Apple Development"
;
CODE_SIGN_STYLE
=
Automatic
;
CURRENT_PROJECT_VERSION
=
2
;
CURRENT_PROJECT_VERSION
=
3
;
DEVELOPMENT_TEAM
=
6K23946NQ5
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
PhoneManager/Info.plist
;
...
...
@@ -880,7 +879,6 @@
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents
=
YES
;
INFOPLIST_KEY_UILaunchStoryboardName
=
LaunchScreen
;
INFOPLIST_KEY_UIMainStoryboardFile
=
Main
;
INFOPLIST_KEY_UIStatusBarStyle
=
""
;
INFOPLIST_KEY_UISupportedInterfaceOrientations
=
UIInterfaceOrientationPortrait
;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad
=
"UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"
;
IPHONEOS_DEPLOYMENT_TARGET
=
14.0
;
...
...
PhoneManager/AppDelegate.swift
View file @
b5f7ddad
...
...
@@ -66,7 +66,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
}
// 初始化广告SDK
A
dv
Manager
.
shared
.
initAdertisementSDK
()
A
D
Manager
.
shared
.
initAdertisementSDK
()
FirebaseApp
.
configure
()
PMEmailManager
.
shareManager
.
restore
()
SettingConfiguration
.
share
.
initData
()
...
...
@@ -85,6 +85,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
self
.
reportAdjsutADJAttribution
(
attribution
)
}
PMLoadingHUD
.
share
.
config
()
UNUserNotificationCenter
.
current
()
.
delegate
=
self
return
true
...
...
@@ -188,6 +189,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
APIReportManager
.
shared
.
startReport
(
type
:
.
app_start
)
UserDef
.
shard
.
saveFirstStart
()
}
ADManager
.
shared
.
getAppStoreVersion
{
value
in
if
let
version
=
value
{
ADManager
.
shared
.
onlineVersion
=
version
}
}
break
}
}
...
...
PhoneManager/Class/Manager/ADManager/ADManager.swift
0 → 100644
View file @
b5f7ddad
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Manager/ADManager/ADModel.swift
0 → 100644
View file @
b5f7ddad
//
// ADModel.swift
// PhoneManager
//
// Created by edy on 2025/5/26.
//
import
Foundation
enum
ADShowError
{
case
limit
case
noAd
case
unkown
case
presentFail
case
fail
(
Error
?)
var
localizedDescription
:
String
{
switch
self
{
case
.
limit
:
return
"ad is limit time"
case
.
noAd
:
return
"no ad to show"
case
.
unkown
:
return
"unkown error"
case
.
fail
(
let
error
):
return
error
?
.
localizedDescription
??
"fail"
case
.
presentFail
:
return
"can not present ad"
}
}
}
enum
ADShowTypeEnum
{
case
Merge
,
PhotoDelete
,
Secret
,
Email
,
Charge
,
Compress
,
videoDdelete
,
Trash
,
EmailLoginSignOut
,
Widgets
var
name
:
String
{
switch
self
{
case
.
Merge
:
return
"Merge"
case
.
PhotoDelete
:
return
"PhotoDelete"
case
.
Secret
:
return
"Secret"
case
.
Email
:
return
"Email"
case
.
Charge
:
return
"Charge"
case
.
Compress
:
return
"Compress"
case
.
videoDdelete
:
return
"videoDelete"
case
.
Trash
:
return
"Trash"
case
.
EmailLoginSignOut
:
return
"EmailLoginSignOut"
case
.
Widgets
:
return
"Widgets"
}
}
}
PhoneManager/Class/Manager/APIReport/APIReportManager.swift
View file @
b5f7ddad
...
...
@@ -68,30 +68,33 @@ struct APIReportManager{
}
private
func
getbpBody
()
->
[
String
:
String
]{
// var DEBUG = true
// #if DEBUG
// DEBUG = true
// #else
// DEBUG = false
// #endif
let
DEBUG
=
false
let
body
=
[
"
\(
bundleId
)
_3"
:
"
\(
Device
.
current
)
"
,
//手机型号
"
\(
bundleId
)
_4"
:
"Apple"
,
// 手机厂商
"
\(
bundleId
)
_5"
:
UIDevice
.
current
.
systemVersion
,
//系统版本号
"
\(
bundleId
)
_8"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleShortVersionString"
]
as?
String
??
""
,
// APP版本号
"
\(
bundleId
)
_9"
:
DeviceIDManager
.
shared
.
deviceID
,
//UUID
"
\(
bundleId
)
_10"
:
A
dv
Manager
.
shared
.
getIDFA
(),
//iafa
"
\(
bundleId
)
_10"
:
A
D
Manager
.
shared
.
getIDFA
(),
//iafa
"
\(
bundleId
)
_13"
:
"iOS"
,
// platform
"
\(
bundleId
)
_14"
:
Bundle
.
main
.
infoDictionary
?[
"CFBundleVersion"
]
as?
String
??
""
,
//版本号
"
\(
bundleId
)
_15"
:
"AppStore"
,
//渠道标识
"
\(
bundleId
)
_24"
:
DEBUG
?
"debug"
:
"release"
,
//环境 debug:开发环境 release:正式环境
"
\(
bundleId
)
_24"
:
isDebug
()
?
"debug"
:
"release"
,
//环境 debug:开发环境 release:正式环境
"
\(
bundleId
)
_34"
:
TimeZone
.
current
.
identifier
,
//手机本地时区
"
\(
bundleId
)
_35"
:
DeviceIDManager
.
shared
.
deviceID
//UUID
]
return
body
}
// 使用编译时条件的辅助函数
private
func
isDebug
()
->
Bool
{
#if DEBUG
return
true
#else
return
false
#endif
}
}
...
...
PhoneManager/Class/Manager/PMPhotoManager/PhotoManager.swift
View file @
b5f7ddad
...
...
@@ -833,4 +833,112 @@ extension PhotoManager{
filterSimilarScreenShotModels
=
similarShots
}
func
getPHAsssetwithID
(
ids
:[
String
])
->
PHAsset
?
{
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
ids
,
options
:
nil
)
let
assetsArray
=
fetchResult
.
objects
(
at
:
IndexSet
(
0
..<
fetchResult
.
count
))
return
assetsArray
.
first
}
func
getPHAsssetwithIDs
(
ids
:[
AssetModel
])
->
[
PHAsset
]?
{
let
localIdentifiers
=
ids
.
map
{
$0
.
localIdentifier
}
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
localIdentifiers
,
options
:
nil
)
let
assetsArray
=
fetchResult
.
objects
(
at
:
IndexSet
(
0
..<
fetchResult
.
count
))
return
assetsArray
}
func
getImageFromAssetID
(
id
:
String
)
->
UIImage
?
{
if
let
asset
=
getPHAsssetwithID
(
ids
:
[
id
])
{
return
getImageFromAsset
(
asset
:
asset
)
}
else
{
return
nil
}
}
func
getImageFromAsset
(
asset
:
PHAsset
)
->
UIImage
?
{
var
image
:
UIImage
?
let
imageManager
=
PHImageManager
.
default
()
let
targetSize
=
CGSize
(
width
:
400
,
height
:
400
)
let
options
=
PHImageRequestOptions
()
options
.
isSynchronous
=
true
options
.
deliveryMode
=
.
opportunistic
options
.
isNetworkAccessAllowed
=
true
imageManager
.
requestImage
(
for
:
asset
,
targetSize
:
targetSize
,
contentMode
:
.
aspectFill
,
options
:
options
)
{
result
,
_
in
image
=
result
}
return
image
}
static
func
deleteAssets
(
localIdentifiers
:
[
String
],
suc
:
@escaping
()
->
())
{
// 获取要删除的 PHAsset
PMLoadingHUD
.
share
.
show
()
let
fetchResult
=
PHAsset
.
fetchAssets
(
withLocalIdentifiers
:
localIdentifiers
,
options
:
nil
)
// 开始删除操作
PHPhotoLibrary
.
shared
()
.
performChanges
({
// 创建删除请求
PHAssetChangeRequest
.
deleteAssets
(
fetchResult
)
})
{
success
,
error
in
if
success
{
suc
()
}
else
if
let
error
=
error
{
print
(
"删除失败:
\(
error
.
localizedDescription
)
"
)
}
PMLoadingHUD
.
share
.
disMiss
()
}
}
func
asynGetImageFromAssetID
(
id
:
String
,
finised
:
@escaping
(
UIImage
)
->
Void
)
{
if
let
asset
=
getPHAsssetwithID
(
ids
:
[
id
])
{
let
imageManager
=
PHImageManager
.
default
()
let
targetSize
=
CGSize
(
width
:
400
,
height
:
400
)
let
options
=
PHImageRequestOptions
()
options
.
isSynchronous
=
false
options
.
deliveryMode
=
.
opportunistic
options
.
isNetworkAccessAllowed
=
true
imageManager
.
requestImage
(
for
:
asset
,
targetSize
:
targetSize
,
contentMode
:
.
aspectFill
,
options
:
options
)
{
result
,
_
in
finised
(
result
??
UIImage
())
}
}
else
{
finised
(
UIImage
())
}
}
/// 获取视频第一帧
/// - Parameters:
/// - ident: 视频的标识
/// - finished: 完成回调
func
getVideoImageByIdent
(
ident
:
AssetModel
,
finished
:
@escaping
(
UIImage
)
->
Void
,
errorHandler
:
@escaping
()
->
Void
){
// 定义请求选项来获取视频的第一帧
let
options
=
PHImageRequestOptions
()
// 获取当前版本的照片或视频
options
.
version
=
.
current
// 尽可能快地提供结果
options
.
deliveryMode
=
.
highQualityFormat
// 允许从iCloud请求
options
.
isNetworkAccessAllowed
=
true
// 异步请求
options
.
isSynchronous
=
false
// 从 PHAsset 获取 AVAsset
if
let
videoAsset
=
getPHAsssetwithID
(
ids
:
[
ident
.
localIdentifier
]){
// 使用requestImageForAsset方法请求视频的第一帧图片
PHImageManager
.
default
()
.
requestImage
(
for
:
videoAsset
,
targetSize
:
CGSize
(
width
:
400
,
height
:
400
),
contentMode
:
PHImageContentMode
.
aspectFit
,
options
:
options
)
{
image
,
_
in
// 处理获取到的图片
if
let
thumbnailImage
=
image
{
// 使用获取到的图片,例如显示在UIImageView上
finished
(
thumbnailImage
)
}
else
{
errorHandler
()
}
}
}
}
}
PhoneManager/Class/Manager/PMPhotoManager/PhotoModel.swift
View file @
b5f7ddad
...
...
@@ -191,3 +191,23 @@ extension Sequence where Element == [AssetModel] {
}
}
}
enum
PrivacyType
:
String
{
case
authorized
=
"authorized"
case
notDetermined
=
"notDetermined"
case
denied
=
"denied"
case
restricted
=
"restricted"
}
enum
PhotsFileType
:
String
{
case
duplicates
=
"Duplicates"
case
similar
=
"Similar"
case
videos
=
"Videos"
case
similarScreenshots
=
"Similar Screenshots"
case
screenshots
=
"Screenshots"
case
SimilarVideos
=
"Similar Videos"
case
Other
=
"Other"
}
PhoneManager/Class/Manager/PMPhotoManager/SecretPhotoManager.swift
0 → 100644
View file @
b5f7ddad
//
// SecretPhotoManager.swift
// PhoneManager
//
// Created by edy on 2025/5/26.
//
import
Foundation
import
UIKit
import
HXPhotoPicker
import
CryptoKit
import
Photos
class
SecretPhotoManager
:
NSObject
,
PhotoPickerControllerDelegate
,
CameraControllerDelegate
{
func
cameraController
(
_
cameraController
:
HXPhotoPicker
.
CameraController
,
didFinishWithResult
result
:
HXPhotoPicker
.
CameraController
.
Result
,
phAsset
:
PHAsset
?,
location
:
CLLocation
?)
{
switch
result
{
case
.
image
(
let
image
):
image
.
compressImage
(
0.3
)
{[
weak
self
]
image
in
let
data
=
image
.
pngData
()
guard
self
?
.
callback
!=
nil
else
{
return
}
self
?
.
callback
!
(
0
,
data
)
}
break
case
.
video
(
let
fileUrl
):
let
data
=
NSData
(
contentsOf
:
fileUrl
)
guard
callback
!=
nil
else
{
return
}
callback
!
(
1
,
data
)
break
default
:
break
}
}
func
pickerController
(
_
pickerController
:
PhotoPickerController
,
didFinishSelection
result
:
PickerResult
)
{
guard
callback
!=
nil
else
{
return
}
callback
!
(
-
1
,
result
.
photoAssets
)
}
func
deleteAssets
(
_
assets
:[
PHAsset
]
=
[])
->
Void
{
if
assets
.
count
>
0
{
PMLoadingHUD
.
share
.
show
()
PHPhotoLibrary
.
shared
()
.
performChanges
({
PHAssetChangeRequest
.
deleteAssets
(
assets
as
NSFastEnumeration
)
})
{
success
,
error
in
if
success
{
print
(
"删除成功"
)
DispatchQueue
.
main
.
asyncAfter
(
deadline
:
.
now
()
+
1.0
)
{
PMLoadingHUD
.
share
.
disMiss
()
}
}
else
if
let
error
=
error
{
DispatchQueue
.
main
.
async
{
PMLoadingHUD
.
share
.
disMiss
()
}
print
(
"删除失败:
\(
error
.
localizedDescription
)
"
)
}
}
}
}
static
let
share
=
SecretPhotoManager
()
var
callback
:((
Int
,
Any
)
->
Void
)?
func
show
(
_
type
:
Int
)
->
Void
{
if
type
==
0
{
let
config
=
CameraConfiguration
()
let
vc
=
CameraController
(
config
:
config
,
type
:
.
all
,
delegate
:
self
)
vc
.
modalPresentationStyle
=
.
overFullScreen
guard
let
root
=
cWindow
?
.
rootViewController
else
{
return
}
root
.
present
(
vc
,
animated
:
true
)
}
else
{
var
config
=
PickerConfiguration
()
config
.
selectMode
=
.
multiple
config
.
maximumSelectedCount
=
4
let
vc
=
PhotoPickerController
(
picker
:
config
,
delegate
:
self
)
vc
.
modalPresentationStyle
=
.
overFullScreen
guard
let
root
=
cWindow
?
.
rootViewController
else
{
return
}
root
.
present
(
vc
,
animated
:
true
)
}
}
}
PhoneManager/Class/Page/Advertisement/Manager/AdvManager.swift
View file @
b5f7ddad
...
...
@@ -23,12 +23,12 @@ enum AdvertisementType {
class
AdvManager
:
NSObject
,
FullScreenContentDelegate
{
// fixme:上线前更改
private
static
let
REWARDED_INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3480207748580737/4276457203"
private
static
let
INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3480207748580737/5836950888"
//
private static let REWARDED_INTERSTITIALAD_KEY : String = "ca-app-pub-3480207748580737/4276457203"
//
private static let INTERSTITIALAD_KEY : String = "ca-app-pub-3480207748580737/5836950888"
// info.plist: ca-app-pub-3480207748580737~4236262472
//
private static let REWARDED_INTERSTITIALAD_KEY : String = "ca-app-pub-3940256099942544/6978759866"
//
private static let INTERSTITIALAD_KEY : String = "ca-app-pub-3940256099942544/4411468910"
private
static
let
REWARDED_INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3940256099942544/6978759866"
private
static
let
INTERSTITIALAD_KEY
:
String
=
"ca-app-pub-3940256099942544/4411468910"
static
let
shared
:
AdvManager
=
AdvManager
()
...
...
@@ -253,9 +253,11 @@ class AdvManager : NSObject, FullScreenContentDelegate {
await
self
.
loadRewardedInterstitialAd
()
}
if
!
isByInter
{
showInterstitialAd
(
vc
:
vc
,
isByReward
:
true
)
}
else
{
showErrMessage
(
vc
:
vc
)
if
let
inter
=
self
.
interstitial
{
showInterstitialAd
(
vc
:
vc
,
isByReward
:
true
)
}
else
{
showErrMessage
(
vc
:
vc
)
}
}
return
}
...
...
PhoneManager/Class/Page/Advertisement/View/AdvTipDeleteView.swift
View file @
b5f7ddad
...
...
@@ -306,7 +306,7 @@ extension AdvTipDeleteView : UICollectionViewDataSource, UICollectionViewDelegat
// }
// 最多25张使用同步
if
let
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
self
.
dataSource
[
indexPath
.
item
]
.
localIdentifier
)
{
if
let
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
self
.
dataSource
[
indexPath
.
item
]
.
localIdentifier
)
{
cell
.
imageView
.
image
=
image
}
return
cell
...
...
PhoneManager/Class/Page/Charge/Controller/ChargeInfoViewController.swift
View file @
b5f7ddad
...
...
@@ -78,9 +78,9 @@ class ChargeInfoViewController:BaseViewController {
self
.
view
.
hideBlur
()
if
isSure
{
self
.
popAdverTisement
()
AdvManager
.
shared
.
finisedCallBack
=
{
self
.
setAnimation
()
}
//
AdvManager.shared.finisedCallBack = {
//
self.setAnimation()
//
}
}
}
}
...
...
@@ -239,7 +239,13 @@ class ChargeInfoViewController:BaseViewController {
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"charge"
)
//AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"charge")
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Charge
.
name
)
{
self
.
setAnimation
()
}
showFailBlock
:
{
error
in
}
}
}
PhoneManager/Class/Page/Compress/Cell/CompressSelectCell.swift
View file @
b5f7ddad
...
...
@@ -36,24 +36,28 @@ class CompressSelectCell : UICollectionViewCell {
var
model
:
AssetModel
?
{
didSet
{
guard
let
model
=
self
.
model
else
{
return
}
self
.
backImageView
.
image
=
UIImage
()
if
self
.
currentMediaType
==
.
compressPhoto
{
let
viewModel
=
CompressViewModel
()
viewModel
.
getImageFromAssetIdentifier
(
identifier
:
model
.
localIdentifier
)
{[
weak
self
]
image
in
guard
let
self
else
{
return
}
DispatchQueue
.
main
.
async
{
self
.
backImageView
.
image
=
image
}
}
}
else
{
PhotoAndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
model
)
{
image
in
DispatchQueue
.
main
.
async
{
self
.
backImageView
.
image
=
image
}
}
errorHandler
:
{
print
(
"获取视频图片资源失败"
)
}
}
let
placeImage
=
currentMediaType
==
.
compressPhoto
?
"videosmoren"
:
"othermoren"
self
.
backImageView
.
asset
.
load
(
withLocalIdentifier
:
model
.
localIdentifier
,
placeholder
:
UIImage
.
init
(
named
:
placeImage
))
// self.backImageView.image = UIImage()
// if self.currentMediaType == .compressPhoto {
// let viewModel = CompressViewModel()
// viewModel.getImageFromAssetIdentifier(identifier: model.localIdentifier) {[weak self] image in
// guard let self else { return}
// DispatchQueue.main.async {
// self.backImageView.image = image
// }
// }
// }else {
// PhotoAndVideoMananger.mananger.getVideoImageByIdent(ident: model) { image in
// DispatchQueue.main.async {
// self.backImageView.image = image
// }
// } errorHandler: {
// print("获取视频图片资源失败")
// }
// }
// 这里不再进行计算了 直接按照50%的去计算
let
saveSize
=
model
.
assetSize
/
2
let
sizeKB
:
Double
=
saveSize
/
1000
...
...
PhoneManager/Class/Page/Compress/Controller/CompressQualityController.swift
View file @
b5f7ddad
...
...
@@ -290,12 +290,12 @@ class CompressQualityController : BaseViewController{
alertView
.
dismiss
(
animated
:
true
)
{
if
isSure
{
self
.
popAdverTisement
()
AdvManager
.
shared
.
finisedCallBack
=
{
self
.
jumpToNextPage
()
}
AdvManager
.
shared
.
failueFinishedCallBack
=
{
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
}
//
AdvManager.shared.finisedCallBack = {
//
self.jumpToNextPage()
//
}
//
AdvManager.shared.failueFinishedCallBack = {
//
self.navigationController?.popViewController(animated: true)
//
}
}
}
}
...
...
@@ -319,7 +319,13 @@ class CompressQualityController : BaseViewController{
}
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"compress"
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self,from:"compress")
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Compress
.
name
)
{
self
.
jumpToNextPage
()
}
showFailBlock
:
{
error
in
self
.
navigationController
?
.
popViewController
(
animated
:
true
)
}
}
}
PhoneManager/Class/Page/Compress/Controller/PreViewController.swift
View file @
b5f7ddad
...
...
@@ -15,7 +15,7 @@ class PreViewController : BaseViewController {
lazy
var
preImageView
:
UIImageView
=
{
let
view
=
UIImageView
(
frame
:
CGRect
(
x
:
0
,
y
:
self
.
titleView
.
height
,
width
:
self
.
view
.
width
,
height
:
self
.
view
.
height
-
self
.
titleView
.
height
))
view
.
backgroundColor
=
.
white
view
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
self
.
imageIdent
)
view
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
self
.
imageIdent
)
view
.
contentMode
=
.
scaleAspectFit
view
.
clipsToBounds
=
true
...
...
PhoneManager/Class/Page/Contact/View/Dup/MergeButtonView.swift
View file @
b5f7ddad
...
...
@@ -63,14 +63,21 @@ extension MergeButtonView {
self
.
alertWhenMergeContact
()
if
IAPManager
.
share
.
isSubscribed
==
false
{
// 添加的时候需要先弹出广告
if
let
vc
=
self
.
responderViewController
()
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
vc
,
from
:
"merge"
,
needAlert
:
true
)
AdvManager
.
shared
.
finisedCallBack
=
{
self
.
alertWhenMergeContact
()
}
}
else
{
self
.
alertWhenMergeContact
()
// if let vc = self.responderViewController() {
// AdvManager.shared.showInterstitialAd(vc: vc,from:"merge",needAlert: true)
// AdvManager.shared.finisedCallBack = {
// self.alertWhenMergeContact()
// }
// }else {
// self.alertWhenMergeContact()
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Merge
.
name
)
{[
weak
self
]
in
guard
let
weakSelf
=
self
else
{
return
}
weakSelf
.
alertWhenMergeContact
()
}
showFailBlock
:
{
_
in
ADManager
.
shared
.
showErrMessage
()
}
}
else
{
self
.
alertWhenMergeContact
()
}
...
...
PhoneManager/Class/Page/Contact/View/Dup/MergePreButtonView.swift
View file @
b5f7ddad
...
...
@@ -60,13 +60,19 @@ extension MergePreButtonView {
@objc
func
mergePre
(){
if
IAPManager
.
share
.
isSubscribed
==
false
{
// 添加的时候需要先弹出广告
if
let
vc
=
self
.
responderViewController
()
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
vc
,
needAlert
:
true
)
AdvManager
.
shared
.
finisedCallBack
=
{
self
.
mergePreCallBack
()
}
}
else
{
self
.
mergePreCallBack
()
// if let vc = self.responderViewController() {
// AdvManager.shared.showInterstitialAd(vc: vc,needAlert: true)
// AdvManager.shared.finisedCallBack = {
// self.mergePreCallBack()
// }
// }else {
// self.mergePreCallBack()
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Merge
.
name
)
{[
weak
self
]
in
guard
let
weakSelf
=
self
else
{
return
}
weakSelf
.
mergePreCallBack
()
}
showFailBlock
:
{
_
in
ADManager
.
shared
.
showErrMessage
()
}
}
else
{
self
.
mergePreCallBack
()
...
...
PhoneManager/Class/Page/Home/Controller/HomeInfoViewController.swift
View file @
b5f7ddad
...
...
@@ -136,7 +136,7 @@ class HomeInfoViewController:BaseViewController {
view
.
dataSource
=
dealArray
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
HomePayViewController
.
show
{
...
...
@@ -229,13 +229,21 @@ class HomeInfoViewController:BaseViewController {
}
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
let
currentType
=
self
.
type
==
.
SimilarVideos
?
ADShowTypeEnum
.
videoDdelete
:
ADShowTypeEnum
.
PhotoDelete
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
currentType
.
name
)
{
DispatchQueue
.
main
.
async
{
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
}
}
showFailBlock
:
{
error
in
}
// self.popAdverTisement()
// 广告看完再结束
// AdvManager.shared.finisedCallBack = {
// DispatchQueue.main.async {
// deleteOp(imgs: tempArr,isAfterAdv: true)
// }
// }
}
else
{
deleteOp
(
imgs
:
tempArr
,
isAfterAdv
:
true
)
}
...
...
@@ -293,7 +301,15 @@ class HomeInfoViewController:BaseViewController {
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self)
// ADManager.shared.showRewardedInterstitialAd(from: "") {
// DispatchQueue.main.async {
// deleteOp(imgs: tempArr,isAfterAdv: true)
// }
// } showFailBlock: { error in
//
// }
}
// 由于继承自 UIViewController,必须实现这个必需的构造器
...
...
PhoneManager/Class/Page/Home/Controller/HomePhotosDetailViewController.swift
View file @
b5f7ddad
...
...
@@ -506,7 +506,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
dataSource
.
isSeleted
=
cell
.
choose
dataSource
.
id
=
ident
// 获取image
dataSource
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
ident
.
localIdentifier
)
dataSource
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
ident
.
localIdentifier
)
vc
.
homeDataSource
=
[
dataSource
]
vc
.
backOrgPageCallBack
=
{
index
,
data
in
...
...
@@ -671,7 +671,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
view
.
dataSource
=
self
.
selectedModel
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
HomePayViewController
.
show
{
...
...
@@ -686,7 +686,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
}
else
{
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
self
.
selectedModel
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
...
...
@@ -754,10 +754,15 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
}
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// self.popAdverTisement()
// // 广告看完再结束
// AdvManager.shared.finisedCallBack = {
// self.deleteAction(count: deleteCount,isAfterAdv: true)
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
self
.
mediaType
?
.
rawValue
??
""
)
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
showFailBlock
:
{
error
in
}
}
else
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
...
...
@@ -776,7 +781,7 @@ extension HomePhotosDetailViewController:WaterfallMutiSectionDelegate,UICollecti
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
self
.
mediaType
?
.
rawValue
??
""
)
// AdvManager.shared.showRewardedInterstitialAd(vc: self,from:self.mediaType?.rawValue ?? ""
}
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
...
...
PhoneManager/Class/Page/Home/Controller/HomeVideoDetailController.swift
View file @
b5f7ddad
...
...
@@ -393,7 +393,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
guard
let
self
else
{
return
}
// 获取视频的图片
Photo
AndVideoMananger
.
mananger
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
Photo
Manager
.
shared
.
getVideoImageByIdent
(
ident
:
ident
)
{
image
in
// 点击之后跳转详情页面
if
self
.
videoDetailNavView
?
.
startSelectButton
.
isSelected
==
false
{
let
vc
=
PhotoRemoveViewController
(
data
:
self
.
resourceData
,
currentIndex
:
indexPath
.
row
,
mediaType
:
.
video
)
...
...
@@ -562,7 +562,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
view
.
dataSource
=
self
.
selectedModel
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
HomePayViewController
.
show
{
...
...
@@ -577,7 +577,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
else
{
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
self
.
selectedModel
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
...
...
@@ -639,18 +639,25 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
self
.
view
.
hideBlur
()
if
deleteCount
<
0
{
return
}
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// self.popAdverTisement()
// // 广告看完再结束
// AdvManager.shared.finisedCallBack = {
// self.deleteAction(count: deleteCount,isAfterAdv: true)
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
""
)
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
showFailBlock
:
{
_
in
}
}
else
{
self
.
deleteAction
(
count
:
deleteCount
,
isAfterAdv
:
true
)
}
...
...
@@ -675,7 +682,7 @@ extension HomeVideoDetailController:WaterfallMutiSectionDelegate,UICollectionVie
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"video_delete"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "video_delete")
}
func
deleteAction
(
count
:
Int
,
isAfterAdv
:
Bool
){
...
...
PhoneManager/Class/Page/Home/Controller/HomeViewController.swift
View file @
b5f7ddad
...
...
@@ -20,9 +20,7 @@ class HomeViewController:BaseViewController {
var
homeView
:
HomeView
?
var
isAdCallBack
=
false
let
adManager
=
AdvManager
.
shared
fileprivate
func
junmToModule
(
_
cIndex
:
String
,
_
self
:
HomeViewController
)
{
switch
cIndex
{
...
...
@@ -185,24 +183,29 @@ class HomeViewController:BaseViewController {
//self.junmToModule(cIndex, self)
// 先走广告策略
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
adManager
.
finisedCallBack
=
{
Print
(
"执行成功"
,
cIndex
)
if
self
.
adManager
.
adFromVC
==
cIndex
,
self
.
adManager
.
isFromHome
{
self
.
isAdCallBack
=
true
self
.
junmToModule
(
cIndex
,
self
)
}
}
self
.
adManager
.
failueFinishedCallBack
=
{
// 首页特殊要求广告没准备好也需要跳转
Print
(
"执行失败"
,
cIndex
)
if
self
.
adManager
.
adFromVC
==
cIndex
,
self
.
adManager
.
isFromHome
{
self
.
junmToModule
(
cIndex
,
self
)
}
}
self
.
adManager
.
showInterstitialAd
(
vc
:
self
,
from
:
cIndex
,
isHome
:
true
)
//
self.adManager.finisedCallBack = {
//
Print("执行成功",cIndex)
//
if self.adManager.adFromVC == cIndex,self.adManager.isFromHome{
//
self.isAdCallBack = true
//
self.junmToModule(cIndex, self)
//
}
//
}
//
self.adManager.failueFinishedCallBack = {
//
// 首页特殊要求广告没准备好也需要跳转
//
Print("执行失败",cIndex)
//
if self.adManager.adFromVC == cIndex,self.adManager.isFromHome{
//
self.junmToModule(cIndex, self)
//
}
//
}
//
self.adManager.showInterstitialAd(vc: self,from: cIndex,isHome: true)
// self.junmToModule(cIndex, self)
ADManager
.
shared
.
showInterstitialAd
(
from
:
cIndex
)
{
self
.
junmToModule
(
cIndex
,
self
)
}
showFailBlock
:
{
error
in
self
.
junmToModule
(
cIndex
,
self
)
}
}
else
{
self
.
isAdCallBack
=
true
self
.
junmToModule
(
cIndex
,
self
)
...
...
@@ -321,7 +324,7 @@ extension HomeViewController {
case
.
authorized
:
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
@@ -347,7 +350,7 @@ extension HomeViewController {
case
.
authorized
:
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
PhoneManager/Class/Page/Home/Controller/PhotoRemoveViewController.swift
View file @
b5f7ddad
...
...
@@ -548,7 +548,7 @@ class PhotoRemoveViewController: BaseViewController {
}
}
}
else
{
Photo
AndVideoMananger
.
mananger
.
asynGetImageFromAssetID
(
id
:
dataModel
[
imageIndex
]
.
localIdentifier
)
{
image
in
Photo
Manager
.
shared
.
asynGetImageFromAssetID
(
id
:
dataModel
[
imageIndex
]
.
localIdentifier
)
{
image
in
view
.
configure
(
with
:
image
)
}
}
...
...
PhoneManager/Class/Page/Home/Controller/PhotoSlideViewController.swift
View file @
b5f7ddad
...
...
@@ -215,11 +215,11 @@ class PhotoSlideViewController: BaseViewController {
guard
dataSource
.
indices
.
contains
(
currentIndex
)
else
{
return
}
// 获取资源
topView
.
imageView
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
dataSource
[
currentIndex
]
.
localIdentifier
)
topView
.
imageView
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
dataSource
[
currentIndex
]
.
localIdentifier
)
// 预加载下一张
let
next
=
currentIndex
-
1
>=
0
?
currentIndex
-
1
:
dataSource
.
count
-
1
bottomView
.
imageView
.
image
=
Photo
AndVideoMananger
.
mananger
.
getImageFromAssetID
(
id
:
dataSource
[
next
]
.
localIdentifier
)
bottomView
.
imageView
.
image
=
Photo
Manager
.
shared
.
getImageFromAssetID
(
id
:
dataSource
[
next
]
.
localIdentifier
)
}
private
func
handleCardDisappeared
()
{
...
...
PhoneManager/Class/Page/Home/View/Model/HomePhotosModel .swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Page/Home/View/TrashSubView.swift
View file @
b5f7ddad
...
...
@@ -116,7 +116,7 @@ extension TrashSubView {
view
.
dataSource
=
data
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
Print
(
"免费次数----
\(
freeCount
)
"
)
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
...
...
@@ -132,7 +132,7 @@ extension TrashSubView {
}
}
else
{
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
data
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
...
...
@@ -193,8 +193,8 @@ extension TrashSubView {
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{
[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
if
let
vc
=
self
.
responderViewController
()
{
vc
.
view
.
hideBlur
()
}
...
...
@@ -208,15 +208,25 @@ extension TrashSubView {
}
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// self.popAdverTisement()
// // 广告看完再结束
// AdvManager.shared.finisedCallBack = {
// let tempArray = Array(data.prefix(deleteCount))
// TrashDataManager.clearTrashData(mediaType: self.type,data: tempArray) {
// self.clearTashDataCallBack()
// self.showDeleteSuccess(array: tempArray)
// }
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Trash
.
name
)
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
self
.
clearTashDataCallBack
()
self
.
showDeleteSuccess
(
array
:
tempArray
)
}
}
showFailBlock
:
{
_
in
}
}
else
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
self
.
type
,
data
:
tempArray
)
{
...
...
@@ -279,7 +289,7 @@ extension TrashSubView {
/// 弹出广告
func
popAdverTisement
(){
if
let
vc
=
self
.
responderViewController
()
{
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
vc
,
from
:
"trash"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: vc,from: "trash")
}
}
...
...
PhoneManager/Class/Page/Landing/PermissionVC.swift
View file @
b5f7ddad
...
...
@@ -155,20 +155,22 @@ class PermissionVC:UIViewController {
@IBAction
func
gerstartedClick
(
_
sender
:
Any
)
{
PhotoAndVideoMananger
.
getPrivacy
{[
weak
self
]
status
in
guard
let
self
else
{
return
}
if
let
photoStatus
=
status
as?
PrivacyType
{
switch
photoStatus
{
case
.
authorized
,
.
denied
,
.
restricted
:
self
.
gotoNext
()
case
.
notDetermined
:
break
}
}
}
// PhotoAndVideoMananger.getPrivacy {[weak self] status in
//
// guard let self else {return}
//
// if let photoStatus = status as? PrivacyType {
//
// switch photoStatus {
//
// case .authorized,.denied,.restricted:
// self.gotoNext()
// case .notDetermined: break
// }
// }
// }
self
.
gotoNext
()
}
...
...
@@ -258,7 +260,7 @@ extension PermissionVC {
case
.
authorized
:
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
@@ -284,7 +286,7 @@ extension PermissionVC {
case
.
authorized
:
// 用户已授权跟踪
print
(
"用户已授权应用进行跟踪"
)
Print
(
"idfa"
,
A
dv
Manager
.
shared
.
getIDFA
())
Print
(
"idfa"
,
A
D
Manager
.
shared
.
getIDFA
())
case
.
denied
:
// 用户拒绝了跟踪请求
print
(
"用户拒绝了应用的跟踪请求"
)
...
...
PhoneManager/Class/Page/Secret/SecretViewController.swift
View file @
b5f7ddad
...
...
@@ -308,7 +308,6 @@ class SecretViewController: BaseViewController {
self
.
AddAction
.
callback
=
{
idx
in
popAdvThenDo
(
idx
:
idx
)
}
}
else
{
self
.
AddAction
=
SecretActionView
()
...
...
@@ -343,7 +342,7 @@ class SecretViewController: BaseViewController {
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"Secret"
)
//
AdvManager.shared.showInterstitialAd(vc: self,from:"Secret")
}
...
...
PhoneManager/Class/Page/Settings/ViewController/SettingViewController.swift
View file @
b5f7ddad
...
...
@@ -192,11 +192,21 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
// callblock()
// }
if
IAPManager
.
share
.
isSubscribed
==
false
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"Widgets"
)
//AdvManager.shared.showInterstitialAd(vc: self,from: "Widgets")
ADManager
.
shared
.
showInterstitialAd
(
from
:
ADShowTypeEnum
.
Widgets
.
name
)
{[
weak
self
]
in
guard
let
self
=
self
else
{
return
}
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
showFailBlock
:
{[
weak
self
]
_
in
guard
let
self
=
self
else
{
return
}
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
}
else
{
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
}
let
widget
=
WidgetViewController
()
self
.
navigationController
?
.
pushViewController
(
widget
,
animated
:
true
)
break
case
settingLabels
.
FollowonInstagram
.
rawValue
:
guard
let
url
=
URL
(
string
:
"https://www.instagram.com/phone.manager.app/"
)
else
{
return
}
...
...
@@ -346,16 +356,22 @@ class SettingViewController : BaseViewController , UITableViewDelegate, UITableV
// callblock()
// }
if
IAPManager
.
share
.
isSubscribed
==
false
{
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
self
,
from
:
"emailLoginSignOut"
)
}
let
vc
:
EmailLoginController
=
EmailLoginController
()
vc
.
state
=
.
home
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
vc
.
callblock
=
{
[
weak
self
]
in
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
ADManager
.
shared
.
showInterstitialAd
(
from
:
"emailLoginSignOut"
)
{
let
vc
:
EmailLoginController
=
EmailLoginController
()
vc
.
state
=
.
home
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
vc
.
callblock
=
{
[
weak
self
]
in
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
}
}
showFailBlock
:
{
error
in
let
vc
:
EmailLoginController
=
EmailLoginController
()
vc
.
state
=
.
home
self
.
navigationController
?
.
pushViewController
(
vc
,
animated
:
true
)
vc
.
callblock
=
{
[
weak
self
]
in
self
?
.
tableView
.
reloadRows
(
at
:
[
indexPath
],
with
:
.
none
)
}
}
}
// self.tableView.reloadData()
}
}
...
...
PhoneManager/Class/Page/Trash/Controller/TrashViewController.swift
View file @
b5f7ddad
...
...
@@ -202,7 +202,7 @@ extension TrashViewController:UIScrollViewDelegate{
view
.
dataSource
=
data
// 获取当前免费次数
let
freeCount
=
A
dv
Manager
.
shared
.
defaultFreeTimes
let
freeCount
=
A
D
Manager
.
shared
.
defaultFreeTimes
Print
(
"免费次数----
\(
freeCount
)
"
)
// 当免费次数用完以后,无论删除多少都需要弹出广告
if
freeCount
<=
0
{
...
...
@@ -218,7 +218,7 @@ extension TrashViewController:UIScrollViewDelegate{
}
}
else
{
// 获取次数对应的删除照片数量
var
freeDeleteCount
=
A
dv
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
var
freeDeleteCount
=
A
D
Manager
.
shared
.
advDeleteResouceDic
[
freeCount
]
!
let
tempArray
=
data
if
freeCount
>
1
{
// 如果是前两次,可以免费删除5张照片
...
...
@@ -279,7 +279,8 @@ extension TrashViewController:UIScrollViewDelegate{
}
}
}
view
.
deleteButtonClickCallback
=
{
isMore
,
deleteCount
in
view
.
deleteButtonClickCallback
=
{[
weak
self
]
isMore
,
deleteCount
in
guard
let
self
=
self
else
{
return
}
self
.
view
.
hideBlur
()
if
deleteCount
<
0
{
return
...
...
@@ -291,15 +292,25 @@ extension TrashViewController:UIScrollViewDelegate{
}
if
isMore
==
true
{
if
IAPManager
.
share
.
isSubscribed
==
false
{
self
.
popAdverTisement
()
//
self.popAdverTisement()
// 广告看完再结束
AdvManager
.
shared
.
finisedCallBack
=
{
// AdvManager.shared.finisedCallBack = {
// let tempArray = Array(data.prefix(deleteCount))
// TrashDataManager.clearTrashData(mediaType: info.0,data: tempArray) {
// info.1.dataSource.removeAll(where: {tempArray.map({$0.localIdentifier}).contains($0.localIdentifier)})
// self.showDeleteSuccess(array: tempArray)
// }
// }
ADManager
.
shared
.
showRewardedInterstitialAd
(
from
:
ADShowTypeEnum
.
Trash
.
name
)
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
info
.
1
.
dataSource
.
removeAll
(
where
:
{
tempArray
.
map
({
$0
.
localIdentifier
})
.
contains
(
$0
.
localIdentifier
)})
self
.
showDeleteSuccess
(
array
:
tempArray
)
}
}
showFailBlock
:
{
_
in
}
}
else
{
let
tempArray
=
Array
(
data
.
prefix
(
deleteCount
))
TrashDataManager
.
clearTrashData
(
mediaType
:
info
.
0
,
data
:
tempArray
)
{
...
...
@@ -324,7 +335,7 @@ extension TrashViewController:UIScrollViewDelegate{
/// 弹出广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showRewardedInterstitialAd
(
vc
:
self
,
from
:
"trash"
)
//
AdvManager.shared.showRewardedInterstitialAd(vc: self,from: "trash")
}
// 显示弹出框
...
...
PhoneManager/Class/Page/Trash/DataManager/TrashDataManager.swift
View file @
b5f7ddad
...
...
@@ -23,7 +23,7 @@ class TrashDataManager {
let
trashData
=
self
.
getCurrentMediaTypeTrashData
(
mediaType
:
mediaType
)
if
trashData
.
count
>
0
{
let
identifierArray
:
[
String
]
=
data
.
count
==
0
?
trashData
.
map
({
$0
.
localIdentifier
})
:
data
.
map
({
$0
.
localIdentifier
})
Photo
AndVideoMananger
.
deleteAssets
(
localIdentifiers
:
identifierArray
)
{
Photo
Manager
.
shared
.
deleteAssets
(
localIdentifiers
:
identifierArray
)
{
// 清空单利和数据库的数据
if
data
.
count
>
0
{
for
item
in
data
{
...
...
PhoneManager/Class/Resource/Image/chargingStart.png
deleted
100644 → 0
View file @
86e200c3
85 KB
PhoneManager/Class/Resource/Image/img_bj_start_1.png
deleted
100644 → 0
View file @
86e200c3
38 KB
PhoneManager/Class/Resource/Image/img_star_start_2.png
deleted
100644 → 0
View file @
86e200c3
12.8 KB
PhoneManager/Class/Resource/Model/Resnet50.mlmodel
deleted
100644 → 0
View file @
86e200c3
File deleted
PhoneManager/Class/Session/Email/View/EmailCleanListView.swift
View file @
b5f7ddad
...
...
@@ -135,7 +135,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
// 广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
UIViewController
.
topMostViewController
()
??
UIViewController
(),
from
:
"email"
)
//
AdvManager.shared.showInterstitialAd(vc: UIViewController.topMostViewController() ?? UIViewController(),from: "email")
}
private
func
selectSet
(
_
indexPath
:
IndexPath
)
->
Void
{
...
...
@@ -154,6 +154,7 @@ extension EmailCleanListView : UITableViewDataSource,UITableViewDelegate {
}
func
tableView
(
_
tableView
:
UITableView
,
cellForRowAt
indexPath
:
IndexPath
)
->
UITableViewCell
{
let
cell
=
tableView
.
dequeueReusableCell
(
withIdentifier
:
EmailCleanListViewCell
.
id
,
for
:
indexPath
)
as!
EmailCleanListViewCell
cell
.
selectionStyle
=
.
none
let
data
=
datasource
[
indexPath
.
row
]
...
...
PhoneManager/Class/Session/Email/View/EmailContentView.swift
View file @
b5f7ddad
...
...
@@ -184,7 +184,7 @@ extension EmailContentView :UITableViewDelegate,UITableViewDataSource{
// 广告
func
popAdverTisement
(){
AdvManager
.
shared
.
showInterstitialAd
(
vc
:
UIViewController
.
topMostViewController
()
??
UIViewController
())
//
AdvManager.shared.showInterstitialAd(vc: UIViewController.topMostViewController() ?? UIViewController())
}
private
func
Total
()
->
Void
{
...
...
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoAndVideoMananger.swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/PhotoSimilarOptimizer.swift
deleted
100644 → 0
View file @
86e200c3
This diff is collapsed.
Click to expand it.
PhoneManager/Class/Tool/Class/PhotoAndVideoMananger/ResourceManager.swift
deleted
100644 → 0
View file @
86e200c3
//
// ResourceManager.swift
// PhoneManager
//
// Created by edy on 2025/4/1.
//
import
Foundation
import
Photos
class
ResourceManager
{
static
let
manager
:
ResourceManager
=
ResourceManager
()
func
getAllPhotos
()
->
[
String
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
image
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
var
array
:
[
String
]
=
[]
for
ass
in
assetsArray
{
array
.
append
(
ass
.
localIdentifier
)
}
return
array
}
func
getAllPhotosByPHAsset
()
->
[
PHAsset
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
image
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
return
assetsArray
}
/// 获取所有视频
/// - Returns: 视频集合
func
getAllVideo
()
->
[
String
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
video
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
var
array
:
[
String
]
=
[]
for
ass
in
assetsArray
{
array
.
append
(
ass
.
localIdentifier
)
}
return
array
}
func
getAllVideosByPHAsset
()
->
[
PHAsset
]{
let
fetchOptions
=
PHFetchOptions
()
fetchOptions
.
sortDescriptors
=
[
NSSortDescriptor
(
key
:
"creationDate"
,
ascending
:
false
)]
let
videoAssets
=
PHAsset
.
fetchAssets
(
with
:
.
video
,
options
:
fetchOptions
)
let
assetsArray
=
videoAssets
.
objects
(
at
:
IndexSet
(
0
..<
videoAssets
.
count
))
return
assetsArray
}
}
PhoneManager/Class/Tool/Class/SystemCommentManager/SystemCommentManager.swift
View file @
b5f7ddad
...
...
@@ -29,7 +29,7 @@ class SystemCommentManager {
initCommentInfoInDisk
()
}
// 首先是免费三次机会用完之后,第四次点击广告,在结果页点击棒极了(删除成功,且loading页面消失)
if
A
dv
Manager
.
shared
.
defaultFreeTimes
==
0
{
if
A
D
Manager
.
shared
.
defaultFreeTimes
==
0
{
// 判断当天有没有被触发过
if
let
isCommentInCurrentDay
=
UserDefaults
.
standard
.
object
(
forKey
:
SHOW_COMMENT_IN_CURRENT_DAY
){
let
temp
:
Bool
=
isCommentInCurrentDay
as!
Bool
...
...
PhoneManager/Class/Tool/Extension.swift/NSString+Extension.swift
View file @
b5f7ddad
...
...
@@ -195,3 +195,12 @@ extension URL {
}
}
extension
Array
{
func
chunked
(
into
size
:
Int
)
->
[[
Element
]]
{
return
stride
(
from
:
0
,
to
:
count
,
by
:
size
)
.
map
{
Array
(
self
[
$0
..<
Swift
.
min
(
$0
+
size
,
count
)])
}
}
}
PhoneManager/Class/Tool/Singleton/Singleton.swift
View file @
b5f7ddad
...
...
@@ -6,8 +6,7 @@
//
import
Foundation
import
GoogleMobileAds
import
ContactsUI
class
Singleton
{
// 使用静态常量来保存单例实例
...
...
@@ -21,31 +20,8 @@ class Singleton {
var
keepList
:
[
TrashTypeEnum
:
[
AssetModel
]]
=
[:]
var
photoPermission
:
PrivacyType
?
// func startCountdown(completion: @escaping () -> Void) {
//
// if AdvManager.shared.timer != nil {
// return
// }
// let queue = DispatchQueue.global()
// let timer = DispatchSource.makeTimerSource(queue: queue)
// AdvManager.shared.timer = timer
// AdvManager.shared.timer?.schedule(deadline: .now(), repeating: .seconds(1))
// AdvManager.shared.timer?.setEventHandler {
// AdvManager.shared.advTimeAfterInAPP -= 1
// if AdvManager.shared.advTimeAfterInAPP >= 0 {
// } else {
// print("倒计时结束!")
// AdvManager.shared.timer?.cancel()
// completion()
// AdvManager.shared.timer = nil
// }
// }
// timer.resume()
// }
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment