接入Firebase埋点和AppLovinSDK广告
This commit is contained in:
parent
c2ae7720ae
commit
803519a909
@ -4,31 +4,38 @@
|
||||
target 'wallpaper_project' do
|
||||
# Comment the next line if you don't want to use dynamic frameworks
|
||||
use_frameworks!
|
||||
|
||||
|
||||
# Pods for wallpaper_project
|
||||
pod 'SnapKit'
|
||||
#pod 'AFNetworking'
|
||||
pod 'SDWebImage'
|
||||
pod 'IQKeyboardManagerSwift'
|
||||
pod 'BRPickerView'
|
||||
pod 'Alamofire'
|
||||
pod 'FSPagerView'
|
||||
pod 'SVProgressHUD'
|
||||
pod 'CYLTabBarController'
|
||||
pod 'GYSide'
|
||||
pod 'JXSegmentedView'
|
||||
pod 'MJExtension'
|
||||
pod 'MJRefresh'
|
||||
pod 'FLAnimatedImage'
|
||||
pod 'lottie-ios'
|
||||
|
||||
post_install do |installer|
|
||||
pod 'SnapKit'
|
||||
#pod 'AFNetworking'
|
||||
pod 'SDWebImage'
|
||||
pod 'IQKeyboardManagerSwift'
|
||||
pod 'BRPickerView'
|
||||
pod 'Alamofire'
|
||||
pod 'FSPagerView'
|
||||
pod 'SVProgressHUD'
|
||||
pod 'CYLTabBarController'
|
||||
pod 'GYSide'
|
||||
pod 'JXSegmentedView'
|
||||
pod 'MJExtension'
|
||||
pod 'MJRefresh'
|
||||
pod 'FLAnimatedImage'
|
||||
pod 'lottie-ios'
|
||||
pod 'AppLovinSDK'
|
||||
pod 'AppLovinDSPLinkedInAdapter'
|
||||
pod 'AppLovinMediationVungleAdapter'
|
||||
pod 'AppLovinMediationByteDanceAdapter'
|
||||
# pod 'Firebase/Analytics'
|
||||
#pod 'Firebase/Analytics'
|
||||
pod 'Firebase/Core'
|
||||
pod 'Firebase/AnalyticsWithoutAdIdSupport'
|
||||
post_install do |installer|
|
||||
installer.generated_projects.each do |project|
|
||||
project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
|
||||
end
|
||||
project.targets.each do |target|
|
||||
target.build_configurations.each do |config|
|
||||
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@ -1,5 +1,21 @@
|
||||
PODS:
|
||||
- Alamofire (5.9.0)
|
||||
- Ads-Global/BUAdSDK_Compatible (5.9.0.6):
|
||||
- Ads-Global/BURelyAdSDK
|
||||
- Ads-Global/Dep_Compatible
|
||||
- Ads-Global/BURelyAdSDK (5.9.0.6)
|
||||
- Ads-Global/Dep_Compatible (5.9.0.6):
|
||||
- BURelyFoundation_Global/Pangle (~> 0.2.1.4)
|
||||
- Alamofire (5.9.1)
|
||||
- AppLovinDSPLinkedInAdapter (1.2.2.0):
|
||||
- AppLovinSDK
|
||||
- LinkedinAudienceNetwork (= 1.2.2)
|
||||
- AppLovinMediationByteDanceAdapter (5.9.0.6.0):
|
||||
- Ads-Global/BUAdSDK_Compatible (= 5.9.0.6)
|
||||
- AppLovinSDK
|
||||
- AppLovinMediationVungleAdapter (7.3.1.0):
|
||||
- AppLovinSDK
|
||||
- VungleAds (= 7.3.1)
|
||||
- AppLovinSDK (12.4.1)
|
||||
- BRPickerView (2.8.1):
|
||||
- BRPickerView/AddressPickerView (= 2.8.1)
|
||||
- BRPickerView/Base (= 2.8.1)
|
||||
@ -12,29 +28,165 @@ PODS:
|
||||
- BRPickerView/Base
|
||||
- BRPickerView/StringPickerView (2.8.1):
|
||||
- BRPickerView/Base
|
||||
- BURelyFoundation_Global/AFNetworking (0.2.1.4)
|
||||
- BURelyFoundation_Global/APM (0.2.1.4)
|
||||
- BURelyFoundation_Global/Foundation (0.2.1.4):
|
||||
- BURelyFoundation_Global/NETWork
|
||||
- BURelyFoundation_Global/Gecko (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Header (0.2.1.4)
|
||||
- BURelyFoundation_Global/NETWork (0.2.1.4):
|
||||
- BURelyFoundation_Global/AFNetworking
|
||||
- BURelyFoundation_Global/Pangle (0.2.1.4):
|
||||
- BURelyFoundation_Global/AFNetworking
|
||||
- BURelyFoundation_Global/APM
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Gecko
|
||||
- BURelyFoundation_Global/Header
|
||||
- BURelyFoundation_Global/NETWork
|
||||
- BURelyFoundation_Global/SDWebImage
|
||||
- BURelyFoundation_Global/YYModel
|
||||
- BURelyFoundation_Global/ZFPlayer
|
||||
- BURelyFoundation_Global/Zip
|
||||
- BURelyFoundation_Global/SDWebImage (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/YYModel (0.2.1.4)
|
||||
- BURelyFoundation_Global/ZFPlayer (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Zip
|
||||
- BURelyFoundation_Global/Zip (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- CYLTabBarController (1.29.2):
|
||||
- CYLTabBarController/Core (= 1.29.2)
|
||||
- CYLTabBarController/Core (1.29.2)
|
||||
- Firebase/AnalyticsWithoutAdIdSupport (10.24.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics/WithoutAdIdSupport (~> 10.24.0)
|
||||
- Firebase/Core (10.24.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics (~> 10.24.0)
|
||||
- Firebase/CoreOnly (10.24.0):
|
||||
- FirebaseCore (= 10.24.0)
|
||||
- FirebaseAnalytics (10.24.0):
|
||||
- FirebaseAnalytics/AdIdSupport (= 10.24.0)
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseAnalytics/AdIdSupport (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleAppMeasurement (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseAnalytics/WithoutAdIdSupport (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseCore (10.24.0):
|
||||
- FirebaseCoreInternal (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.12)
|
||||
- GoogleUtilities/Logger (~> 7.12)
|
||||
- FirebaseCoreInternal (10.24.0):
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||
- FirebaseInstallations (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||
- PromisesObjC (~> 2.1)
|
||||
- FLAnimatedImage (1.0.17)
|
||||
- FSPagerView (0.8.3)
|
||||
- GoogleAppMeasurement (10.24.0):
|
||||
- GoogleAppMeasurement/AdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleAppMeasurement/AdIdSupport (10.24.0):
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (10.24.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (7.13.0):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Environment (7.13.0):
|
||||
- GoogleUtilities/Privacy
|
||||
- PromisesObjC (< 3.0, >= 1.2)
|
||||
- GoogleUtilities/Logger (7.13.0):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/MethodSwizzler (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Network (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- "GoogleUtilities/NSData+zlib"
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Reachability
|
||||
- "GoogleUtilities/NSData+zlib (7.13.0)":
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Privacy (7.13.0)
|
||||
- GoogleUtilities/Reachability (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/UserDefaults (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GYSide (0.0.5)
|
||||
- IQKeyboardManagerSwift (7.0.1)
|
||||
- JXSegmentedView (1.3.0)
|
||||
- IQKeyboardManagerSwift (6.5.16)
|
||||
- JXSegmentedView (1.3.3)
|
||||
- LinkedinAudienceNetwork (1.2.2)
|
||||
- lottie-ios (4.4.1)
|
||||
- MJExtension (3.4.1)
|
||||
- MJRefresh (3.7.6)
|
||||
- SDWebImage (5.19.0):
|
||||
- SDWebImage/Core (= 5.19.0)
|
||||
- SDWebImage/Core (5.19.0)
|
||||
- MJExtension (3.4.2)
|
||||
- MJRefresh (3.7.9)
|
||||
- nanopb (2.30910.0):
|
||||
- nanopb/decode (= 2.30910.0)
|
||||
- nanopb/encode (= 2.30910.0)
|
||||
- nanopb/decode (2.30910.0)
|
||||
- nanopb/encode (2.30910.0)
|
||||
- PromisesObjC (2.4.0)
|
||||
- SDWebImage (5.19.1):
|
||||
- SDWebImage/Core (= 5.19.1)
|
||||
- SDWebImage/Core (5.19.1)
|
||||
- SnapKit (5.7.1)
|
||||
- SVProgressHUD (2.3.1):
|
||||
- SVProgressHUD/Core (= 2.3.1)
|
||||
- SVProgressHUD/Core (2.3.1)
|
||||
- VungleAds (7.3.1)
|
||||
|
||||
DEPENDENCIES:
|
||||
- Alamofire
|
||||
- AppLovinDSPLinkedInAdapter
|
||||
- AppLovinMediationByteDanceAdapter
|
||||
- AppLovinMediationVungleAdapter
|
||||
- AppLovinSDK
|
||||
- BRPickerView
|
||||
- CYLTabBarController
|
||||
- Firebase/AnalyticsWithoutAdIdSupport
|
||||
- Firebase/Core
|
||||
- FLAnimatedImage
|
||||
- FSPagerView
|
||||
- GYSide
|
||||
@ -49,37 +201,71 @@ DEPENDENCIES:
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- Ads-Global
|
||||
- Alamofire
|
||||
- AppLovinDSPLinkedInAdapter
|
||||
- AppLovinMediationByteDanceAdapter
|
||||
- AppLovinMediationVungleAdapter
|
||||
- AppLovinSDK
|
||||
- BRPickerView
|
||||
- BURelyFoundation_Global
|
||||
- CYLTabBarController
|
||||
- Firebase
|
||||
- FirebaseAnalytics
|
||||
- FirebaseCore
|
||||
- FirebaseCoreInternal
|
||||
- FirebaseInstallations
|
||||
- FLAnimatedImage
|
||||
- FSPagerView
|
||||
- GoogleAppMeasurement
|
||||
- GoogleUtilities
|
||||
- GYSide
|
||||
- IQKeyboardManagerSwift
|
||||
- JXSegmentedView
|
||||
- LinkedinAudienceNetwork
|
||||
- lottie-ios
|
||||
- MJExtension
|
||||
- MJRefresh
|
||||
- nanopb
|
||||
- PromisesObjC
|
||||
- SDWebImage
|
||||
- SnapKit
|
||||
- SVProgressHUD
|
||||
- VungleAds
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24
|
||||
Ads-Global: 3ed9f8c6f11d4d6a4496e1dd74a4537f10b41b65
|
||||
Alamofire: f36a35757af4587d8e4f4bfa223ad10be2422b8c
|
||||
AppLovinDSPLinkedInAdapter: 093f25d472b4073f8203fa72a68347cbd589e232
|
||||
AppLovinMediationByteDanceAdapter: d902ba6e2a6c0061bf2675ec74428b37620b59ca
|
||||
AppLovinMediationVungleAdapter: b42444550ca03233753cfeb36a5660f94d038fb5
|
||||
AppLovinSDK: c57ad0d34625c971d2db127f8ef60570b28ff51a
|
||||
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
||||
BURelyFoundation_Global: 17ed9cd58d138feefd8c0711dd3294766adcb28e
|
||||
CYLTabBarController: db44b5901a28693a8a4279e4721b3aafdd36c178
|
||||
Firebase: 91fefd38712feb9186ea8996af6cbdef41473442
|
||||
FirebaseAnalytics: b5efc493eb0f40ec560b04a472e3e1a15d39ca13
|
||||
FirebaseCore: 11dc8a16dfb7c5e3c3f45ba0e191a33ac4f50894
|
||||
FirebaseCoreInternal: bcb5acffd4ea05e12a783ecf835f2210ce3dc6af
|
||||
FirebaseInstallations: 8f581fca6478a50705d2bd2abd66d306e0f5736e
|
||||
FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
|
||||
FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8
|
||||
GoogleAppMeasurement: f3abf08495ef2cba7829f15318c373b8d9226491
|
||||
GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152
|
||||
GYSide: 672895491bf7a809f0631dd8a122ab5d1d601aae
|
||||
IQKeyboardManagerSwift: 7f6b1b1d1497855d2beea7f2f10ffcc6978525b1
|
||||
JXSegmentedView: fec0d335355b6e019c494fe2e030bde8a36d2df6
|
||||
IQKeyboardManagerSwift: 12d89768845bb77b55cc092ecc2b1f9370f06b76
|
||||
JXSegmentedView: 651b60fcf705258ba9395edd53876dbd2853fb68
|
||||
LinkedinAudienceNetwork: de299f32547bd528916b3c9f113015f74347398c
|
||||
lottie-ios: e047b1d2e6239b787cc5e9755b988869cf190494
|
||||
MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
|
||||
MJRefresh: 2fe7fb43a5167ceda20bb7e63f130c04fd1814a5
|
||||
SDWebImage: 981fd7e860af070920f249fd092420006014c3eb
|
||||
MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8
|
||||
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
|
||||
nanopb: 438bc412db1928dac798aa6fd75726007be04262
|
||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||
SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb
|
||||
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
||||
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
|
||||
VungleAds: 04a17ab51fb61f41cd6d666fd0024509005740fe
|
||||
|
||||
PODFILE CHECKSUM: 8919f964b95c5ac6e11bc2a3a3200b4dd02b3b9c
|
||||
PODFILE CHECKSUM: e5237cccfc6fa11c317ad1e1cbd81ea18c1f4a05
|
||||
|
||||
COCOAPODS: 1.15.2
|
||||
|
||||
2
wallpaper_project/Pods/Alamofire/README.md
generated
2
wallpaper_project/Pods/Alamofire/README.md
generated
@ -132,7 +132,7 @@ Once you have your Swift package set up, adding Alamofire as a dependency is as
|
||||
|
||||
```swift
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.9.0"))
|
||||
.package(url: "https://github.com/Alamofire/Alamofire.git", .upToNextMajor(from: "5.9.1"))
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
@ -39,5 +39,5 @@ public let AF = Session.default
|
||||
/// Namespace for informational Alamofire values.
|
||||
public enum AFInfo {
|
||||
/// Current Alamofire version.
|
||||
public static let version = "5.9.0"
|
||||
public static let version = "5.9.1"
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@
|
||||
import Foundation
|
||||
|
||||
/// An order-preserving and case-insensitive representation of HTTP headers.
|
||||
public struct HTTPHeaders {
|
||||
public struct HTTPHeaders: Equatable, Hashable, Sendable {
|
||||
private var headers: [HTTPHeader] = []
|
||||
|
||||
/// Creates an empty instance.
|
||||
@ -185,7 +185,7 @@ extension HTTPHeaders: CustomStringConvertible {
|
||||
// MARK: - HTTPHeader
|
||||
|
||||
/// A representation of a single HTTP header's name / value pair.
|
||||
public struct HTTPHeader: Hashable {
|
||||
public struct HTTPHeader: Equatable, Hashable, Sendable {
|
||||
/// Name of the header.
|
||||
public let name: String
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
/// `HTTPMethod.get != HTTPMethod(rawValue: "get")`.
|
||||
///
|
||||
/// See https://tools.ietf.org/html/rfc7231#section-4.3
|
||||
public struct HTTPMethod: RawRepresentable, Equatable, Hashable {
|
||||
public struct HTTPMethod: RawRepresentable, Equatable, Hashable, Sendable {
|
||||
/// `CONNECT` method.
|
||||
public static let connect = HTTPMethod(rawValue: "CONNECT")
|
||||
/// `DELETE` method.
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQKeyboardManagerConstants.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -23,11 +23,11 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
// MARK: IQAutoToolbarManageBehavior
|
||||
// MARK: IQAutoToolbarManageBehaviour
|
||||
|
||||
/**
|
||||
`IQAutoToolbarBySubviews`
|
||||
Creates Toolbar according to subview's hierarchy of Textfield's in view.
|
||||
Creates Toolbar according to subview's hirarchy of Textfield's in view.
|
||||
|
||||
`IQAutoToolbarByTag`
|
||||
Creates Toolbar according to tag property of TextField's.
|
||||
@ -36,7 +36,7 @@ Creates Toolbar according to tag property of TextField's.
|
||||
Creates Toolbar according to the y,x position of textField in it's superview coordinate.
|
||||
*/
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@objc public enum IQAutoToolbarManageBehavior: Int {
|
||||
@objc public enum IQAutoToolbarManageBehaviour: Int {
|
||||
case bySubviews
|
||||
case byTag
|
||||
case byPosition
|
||||
@ -50,8 +50,7 @@ Creates Toolbar according to the y,x position of textField in it's superview coo
|
||||
Do not show NextPrevious buttons in any case.
|
||||
|
||||
`IQPreviousNextDisplayModeAlwaysShow`
|
||||
Always show nextPrevious buttons,
|
||||
if there are more than 1 textField then both buttons will be visible but will be shown as disabled.
|
||||
Always show nextPrevious buttons, if there are more than 1 textField then both buttons will be visible but will be shown as disabled.
|
||||
*/
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@objc public enum IQPreviousNextDisplayMode: Int {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQPlaceholderable.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -25,7 +25,6 @@ import Foundation
|
||||
import UIKit
|
||||
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
public protocol IQPlaceholderable: AnyObject {
|
||||
|
||||
var placeholder: String? { get set }
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQTextView.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -25,42 +25,33 @@ import UIKit
|
||||
|
||||
/** @abstract UITextView with placeholder support */
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc open class IQTextView: UITextView {
|
||||
|
||||
@objc required public init?(coder aDecoder: NSCoder) {
|
||||
super.init(coder: aDecoder)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder),
|
||||
name: UITextView.textDidChangeNotification, object: self)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self)
|
||||
}
|
||||
|
||||
@objc override public init(frame: CGRect, textContainer: NSTextContainer?) {
|
||||
super.init(frame: frame, textContainer: textContainer)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder),
|
||||
name: UITextView.textDidChangeNotification, object: self)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self)
|
||||
}
|
||||
|
||||
@objc override open func awakeFromNib() {
|
||||
super.awakeFromNib()
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder),
|
||||
name: UITextView.textDidChangeNotification, object: self)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(self.refreshPlaceholder), name: UITextView.textDidChangeNotification, object: self)
|
||||
}
|
||||
|
||||
private var placeholderInsets: UIEdgeInsets {
|
||||
let top: CGFloat = self.textContainerInset.top
|
||||
let left: CGFloat = self.textContainerInset.left + self.textContainer.lineFragmentPadding
|
||||
let bottom: CGFloat = self.textContainerInset.bottom
|
||||
let right: CGFloat = self.textContainerInset.right + self.textContainer.lineFragmentPadding
|
||||
return UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)
|
||||
return UIEdgeInsets(top: self.textContainerInset.top, left: self.textContainerInset.left + self.textContainer.lineFragmentPadding, bottom: self.textContainerInset.bottom, right: self.textContainerInset.right + self.textContainer.lineFragmentPadding)
|
||||
}
|
||||
|
||||
private var placeholderExpectedFrame: CGRect {
|
||||
let insets: UIEdgeInsets = self.placeholderInsets
|
||||
let maxWidth: CGFloat = self.frame.width-insets.left-insets.right
|
||||
let size: CGSize = CGSize(width: maxWidth, height: self.frame.height-insets.top-insets.bottom)
|
||||
let expectedSize: CGSize = placeholderLabel.sizeThatFits(size)
|
||||
let placeholderInsets = self.placeholderInsets
|
||||
let maxWidth = self.frame.width-placeholderInsets.left-placeholderInsets.right
|
||||
let expectedSize = placeholderLabel.sizeThatFits(CGSize(width: maxWidth, height: self.frame.height-placeholderInsets.top-placeholderInsets.bottom))
|
||||
|
||||
return CGRect(x: insets.left, y: insets.top, width: maxWidth, height: expectedSize.height)
|
||||
return CGRect(x: placeholderInsets.left, y: placeholderInsets.top, width: maxWidth, height: expectedSize.height)
|
||||
}
|
||||
|
||||
lazy var placeholderLabel: UILabel = {
|
||||
@ -127,7 +118,7 @@ import UIKit
|
||||
placeholderLabel.frame = placeholderExpectedFrame
|
||||
}
|
||||
|
||||
@objc private func refreshPlaceholder() {
|
||||
@objc internal func refreshPlaceholder() {
|
||||
|
||||
let text: String = text ?? attributedText?.string ?? ""
|
||||
if text.isEmpty {
|
||||
@ -155,7 +146,7 @@ import UIKit
|
||||
|
||||
didSet {
|
||||
|
||||
if let unwrappedFont: UIFont = font {
|
||||
if let unwrappedFont = font {
|
||||
placeholderLabel.font = unwrappedFont
|
||||
} else {
|
||||
placeholderLabel.font = UIFont.systemFont(ofSize: 12)
|
||||
@ -186,8 +177,8 @@ import UIKit
|
||||
return super.intrinsicContentSize
|
||||
}
|
||||
|
||||
var newSize: CGSize = super.intrinsicContentSize
|
||||
let placeholderInsets: UIEdgeInsets = self.placeholderInsets
|
||||
var newSize = super.intrinsicContentSize
|
||||
let placeholderInsets = self.placeholderInsets
|
||||
newSize.height = placeholderExpectedFrame.height + placeholderInsets.top + placeholderInsets.bottom
|
||||
|
||||
return newSize
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQBarButtonItem.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -21,15 +21,12 @@
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
// import Foundation - UIKit contains Foundation
|
||||
import UIKit
|
||||
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc open class IQBarButtonItem: UIBarButtonItem {
|
||||
|
||||
internal static let flexibleBarButtonItem: IQBarButtonItem = IQBarButtonItem(barButtonSystemItem: .flexibleSpace,
|
||||
target: nil, action: nil)
|
||||
|
||||
@objc public override init() {
|
||||
super.init()
|
||||
initialize()
|
||||
@ -59,10 +56,10 @@ import UIKit
|
||||
@objc override open var tintColor: UIColor? {
|
||||
didSet {
|
||||
|
||||
var textAttributes: [NSAttributedString.Key: Any] = [:]
|
||||
var textAttributes = [NSAttributedString.Key: Any]()
|
||||
textAttributes[.foregroundColor] = tintColor
|
||||
|
||||
if let attributes: [NSAttributedString.Key: Any] = titleTextAttributes(for: .normal) {
|
||||
if let attributes = titleTextAttributes(for: .normal) {
|
||||
for (key, value) in attributes {
|
||||
textAttributes[key] = value
|
||||
}
|
||||
@ -73,22 +70,18 @@ import UIKit
|
||||
}
|
||||
|
||||
/**
|
||||
Boolean to know if it's a system item or custom item,
|
||||
we are having a limitation that we cannot override a designated initializer,
|
||||
so we are manually setting this property once in initialization
|
||||
Boolean to know if it's a system item or custom item, we are having a limitation that we cannot override a designated initializer, so we are manually setting this property once in initialization
|
||||
*/
|
||||
internal var isSystemItem: Bool = false
|
||||
@objc internal var isSystemItem = false
|
||||
|
||||
/**
|
||||
Additional target & action to do get callback action.
|
||||
Note that setting custom target & selector doesn't affect native functionality,
|
||||
this is just an additional target to get a callback.
|
||||
Additional target & action to do get callback action. Note that setting custom target & selector doesn't affect native functionality, this is just an additional target to get a callback.
|
||||
|
||||
@param target Target object.
|
||||
@param action Target Selector.
|
||||
*/
|
||||
@objc open func setTarget(_ target: AnyObject?, action: Selector?) {
|
||||
if let target: AnyObject = target, let action: Selector = action {
|
||||
if let target = target, let action = action {
|
||||
invocation = IQInvocation(target, action)
|
||||
} else {
|
||||
invocation = nil
|
||||
@ -96,8 +89,7 @@ import UIKit
|
||||
}
|
||||
|
||||
/**
|
||||
Customized Invocation to be called when button is pressed.
|
||||
invocation is internally created using setTarget:action: method.
|
||||
Customized Invocation to be called when button is pressed. invocation is internally created using setTarget:action: method.
|
||||
*/
|
||||
@objc open var invocation: IQInvocation? {
|
||||
didSet {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQInvocation.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -24,7 +24,6 @@
|
||||
import UIKit
|
||||
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc public final class IQInvocation: NSObject {
|
||||
@objc public weak var target: AnyObject?
|
||||
@objc public var action: Selector
|
||||
@ -35,8 +34,12 @@ import UIKit
|
||||
}
|
||||
|
||||
@objc public func invoke(from: Any) {
|
||||
if let target: AnyObject = target {
|
||||
if let target = target {
|
||||
UIApplication.shared.sendAction(action, to: target, from: from, for: UIEvent())
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
target = nil
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQPreviousNextView.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -24,6 +24,6 @@
|
||||
import UIKit
|
||||
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc open class IQPreviousNextView: UIView {
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQTitleBarButtonItem.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -24,13 +24,12 @@
|
||||
import UIKit
|
||||
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc open class IQTitleBarButtonItem: IQBarButtonItem {
|
||||
|
||||
@objc open var titleFont: UIFont? {
|
||||
|
||||
didSet {
|
||||
if let unwrappedFont: UIFont = titleFont {
|
||||
if let unwrappedFont = titleFont {
|
||||
titleButton?.titleLabel?.font = unwrappedFont
|
||||
} else {
|
||||
titleButton?.titleLabel?.font = UIFont.systemFont(ofSize: 13)
|
||||
@ -40,7 +39,7 @@ import UIKit
|
||||
|
||||
@objc override open var title: String? {
|
||||
didSet {
|
||||
titleButton?.setTitle(title, for: .normal)
|
||||
titleButton?.setTitle(title, for: .normal)
|
||||
}
|
||||
}
|
||||
|
||||
@ -51,7 +50,7 @@ import UIKit
|
||||
|
||||
didSet {
|
||||
|
||||
if let color: UIColor = titleColor {
|
||||
if let color = titleColor {
|
||||
titleButton?.setTitleColor(color, for: .disabled)
|
||||
} else {
|
||||
titleButton?.setTitleColor(UIColor.lightGray, for: .disabled)
|
||||
@ -66,7 +65,7 @@ import UIKit
|
||||
|
||||
didSet {
|
||||
|
||||
if let color: UIColor = selectableTitleColor {
|
||||
if let color = selectableTitleColor {
|
||||
titleButton?.setTitleColor(color, for: .normal)
|
||||
} else {
|
||||
#if swift(>=5.1)
|
||||
@ -93,7 +92,6 @@ import UIKit
|
||||
_titleView?.backgroundColor = UIColor.clear
|
||||
|
||||
titleButton = UIButton(type: .system)
|
||||
titleButton?.accessibilityTraits = .staticText
|
||||
titleButton?.isEnabled = false
|
||||
titleButton?.titleLabel?.numberOfLines = 3
|
||||
titleButton?.setTitleColor(UIColor.lightGray, for: .disabled)
|
||||
@ -109,37 +107,25 @@ import UIKit
|
||||
titleButton?.titleLabel?.font = self.titleFont
|
||||
_titleView?.addSubview(titleButton!)
|
||||
|
||||
let lowPriority: UILayoutPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultLow.rawValue-1)
|
||||
let highPriority: UILayoutPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultHigh.rawValue-1)
|
||||
let layoutDefaultLowPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultLow.rawValue-1)
|
||||
let layoutDefaultHighPriority = UILayoutPriority(rawValue: UILayoutPriority.defaultHigh.rawValue-1)
|
||||
|
||||
_titleView?.translatesAutoresizingMaskIntoConstraints = false
|
||||
_titleView?.setContentHuggingPriority(lowPriority, for: .vertical)
|
||||
_titleView?.setContentHuggingPriority(lowPriority, for: .horizontal)
|
||||
_titleView?.setContentCompressionResistancePriority(highPriority, for: .vertical)
|
||||
_titleView?.setContentCompressionResistancePriority(highPriority, for: .horizontal)
|
||||
_titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical)
|
||||
_titleView?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal)
|
||||
_titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical)
|
||||
_titleView?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal)
|
||||
|
||||
titleButton?.translatesAutoresizingMaskIntoConstraints = false
|
||||
titleButton?.setContentHuggingPriority(lowPriority, for: .vertical)
|
||||
titleButton?.setContentHuggingPriority(lowPriority, for: .horizontal)
|
||||
titleButton?.setContentCompressionResistancePriority(highPriority, for: .vertical)
|
||||
titleButton?.setContentCompressionResistancePriority(highPriority, for: .horizontal)
|
||||
titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .vertical)
|
||||
titleButton?.setContentHuggingPriority(layoutDefaultLowPriority, for: .horizontal)
|
||||
titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .vertical)
|
||||
titleButton?.setContentCompressionResistancePriority(layoutDefaultHighPriority, for: .horizontal)
|
||||
|
||||
let top: NSLayoutConstraint = NSLayoutConstraint(item: titleButton!, attribute: .top,
|
||||
relatedBy: .equal,
|
||||
toItem: _titleView, attribute: .top,
|
||||
multiplier: 1, constant: 0)
|
||||
let bottom: NSLayoutConstraint = NSLayoutConstraint(item: titleButton!, attribute: .bottom,
|
||||
relatedBy: .equal,
|
||||
toItem: _titleView, attribute: .bottom,
|
||||
multiplier: 1, constant: 0)
|
||||
let leading: NSLayoutConstraint = NSLayoutConstraint(item: titleButton!, attribute: .leading,
|
||||
relatedBy: .equal,
|
||||
toItem: _titleView, attribute: .leading,
|
||||
multiplier: 1, constant: 0)
|
||||
let trailing: NSLayoutConstraint = NSLayoutConstraint(item: titleButton!, attribute: .trailing,
|
||||
relatedBy: .equal,
|
||||
toItem: _titleView, attribute: .trailing,
|
||||
multiplier: 1, constant: 0)
|
||||
let top = NSLayoutConstraint.init(item: titleButton!, attribute: .top, relatedBy: .equal, toItem: _titleView, attribute: .top, multiplier: 1, constant: 0)
|
||||
let bottom = NSLayoutConstraint.init(item: titleButton!, attribute: .bottom, relatedBy: .equal, toItem: _titleView, attribute: .bottom, multiplier: 1, constant: 0)
|
||||
let leading = NSLayoutConstraint.init(item: titleButton!, attribute: .leading, relatedBy: .equal, toItem: _titleView, attribute: .leading, multiplier: 1, constant: 0)
|
||||
let trailing = NSLayoutConstraint.init(item: titleButton!, attribute: .trailing, relatedBy: .equal, toItem: _titleView, attribute: .trailing, multiplier: 1, constant: 0)
|
||||
|
||||
_titleView?.addConstraints([top, bottom, leading, trailing])
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQToolbar.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -25,7 +25,6 @@ import UIKit
|
||||
|
||||
/** @abstract IQToolbar for IQKeyboardManager. */
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
@objc open class IQToolbar: UIToolbar, UIInputViewAudioFeedback {
|
||||
|
||||
override init(frame: CGRect) {
|
||||
@ -60,16 +59,6 @@ import UIKit
|
||||
self.backgroundColor = nil
|
||||
}
|
||||
|
||||
/**
|
||||
Additional bar buttons to show at the leading side.
|
||||
*/
|
||||
open var additionalLeadingItems: [UIBarButtonItem] = []
|
||||
|
||||
/**
|
||||
Additional bar buttons to show at the trailing side.
|
||||
*/
|
||||
open var additionalTrailingItems: [UIBarButtonItem] = []
|
||||
|
||||
/**
|
||||
Previous bar button of toolbar.
|
||||
*/
|
||||
@ -112,7 +101,6 @@ import UIKit
|
||||
get {
|
||||
if privateTitleBarButton == nil {
|
||||
privateTitleBarButton = IQTitleBarButtonItem(title: nil)
|
||||
privateTitleBarButton?.accessibilityTraits = .staticText
|
||||
privateTitleBarButton?.accessibilityLabel = "Title"
|
||||
privateTitleBarButton?.accessibilityIdentifier = privateTitleBarButton?.accessibilityLabel
|
||||
}
|
||||
@ -150,8 +138,8 @@ import UIKit
|
||||
if privateFixedSpaceBarButton == nil {
|
||||
privateFixedSpaceBarButton = IQBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
|
||||
}
|
||||
privateFixedSpaceBarButton?.isSystemItem = true
|
||||
privateFixedSpaceBarButton?.width = 6
|
||||
privateFixedSpaceBarButton!.isSystemItem = true
|
||||
privateFixedSpaceBarButton!.width = 6
|
||||
|
||||
return privateFixedSpaceBarButton!
|
||||
}
|
||||
@ -162,7 +150,7 @@ import UIKit
|
||||
}
|
||||
|
||||
@objc override open func sizeThatFits(_ size: CGSize) -> CGSize {
|
||||
var sizeThatFit: CGSize = super.sizeThatFits(size)
|
||||
var sizeThatFit = super.sizeThatFits(size)
|
||||
sizeThatFit.height = 44
|
||||
return sizeThatFit
|
||||
}
|
||||
@ -170,7 +158,7 @@ import UIKit
|
||||
@objc override open var tintColor: UIColor! {
|
||||
|
||||
didSet {
|
||||
if let unwrappedItems: [UIBarButtonItem] = items {
|
||||
if let unwrappedItems = items {
|
||||
for item in unwrappedItems {
|
||||
item.tintColor = tintColor
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
//
|
||||
// IQUIView+IQKeyboardToolbar.swift
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-24 Iftekhar Qurashi.
|
||||
// https://github.com/hackiftekhar/IQKeyboardManager
|
||||
// Copyright (c) 2013-20 Iftekhar Qurashi.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
@ -23,46 +23,138 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
/**
|
||||
IQBarButtonItemConfiguration for creating toolbar with bar button items
|
||||
*/
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
private struct AssociatedKeys {
|
||||
static var toolbar: Int = 0
|
||||
static var hidePlaceholder: Int = 0
|
||||
static var placeholder: Int = 0
|
||||
@objc public final class IQBarButtonItemConfiguration: NSObject {
|
||||
|
||||
@objc public init(barButtonSystemItem: UIBarButtonItem.SystemItem, action: Selector) {
|
||||
self.barButtonSystemItem = barButtonSystemItem
|
||||
self.image = nil
|
||||
self.title = nil
|
||||
self.action = action
|
||||
super.init()
|
||||
}
|
||||
|
||||
@objc public init(image: UIImage, action: Selector) {
|
||||
self.barButtonSystemItem = nil
|
||||
self.image = image
|
||||
self.title = nil
|
||||
self.action = action
|
||||
super.init()
|
||||
}
|
||||
|
||||
@objc public init(title: String, action: Selector) {
|
||||
self.barButtonSystemItem = nil
|
||||
self.image = nil
|
||||
self.title = title
|
||||
self.action = action
|
||||
super.init()
|
||||
}
|
||||
|
||||
public let barButtonSystemItem: UIBarButtonItem.SystemItem? // System Item to be used to instantiate bar button.
|
||||
|
||||
@objc public let image: UIImage? // Image to show on bar button item if it's not a system item.
|
||||
|
||||
@objc public let title: String? // Title to show on bar button item if it's not a system item.
|
||||
|
||||
@objc public let action: Selector? // action for bar button item. Usually 'doneAction:(IQBarButtonItem*)item'.
|
||||
}
|
||||
|
||||
/**
|
||||
UIImage category methods to get next/prev images
|
||||
*/
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@MainActor
|
||||
public extension IQKeyboardManagerWrapper where Base: UIView {
|
||||
@objc public extension UIImage {
|
||||
|
||||
static func keyboardPreviousImage() -> UIImage? {
|
||||
|
||||
struct Static {
|
||||
static var keyboardUpImage: UIImage?
|
||||
}
|
||||
|
||||
if Static.keyboardUpImage == nil {
|
||||
|
||||
// swiftlint:disable line_length
|
||||
let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGmklEQVRoBd1ZWWwbRRie2bVz27s2adPGxzqxqAQCIRA3CDVJGxpKaEtRoSAVISQQggdeQIIHeIAHkOCBFyQeKlARhaYHvUJa0ksVoIgKUKFqKWqdeG2nR1Lsdeo0h73D54iku7NO6ySOk3alyPN//+zM/81/7MyEkDl66j2eJXWK8vocTT82rTgXk/t8vqBNEI9QSp9zOeVkPJnomgs7ik5eUZQ6OxGOEEq9WcKUksdlWbqU0LRfi70ARSXv8Xi8dkE8CsJ+I1FK6BNYgCgW4A8jPtvtopFHqNeWCLbDIF6fkxQjK91O1z9IgRM59bMAFoV8YEFgka1EyBJfMhkH5L9ACFstS9IpRMDJyfoVEp918sGamoVCme0QyN3GG87wAKcTOBYA4hrJKf+VSCb+nsBnqYHVnr2ntra2mpWWH0BVu52fhRH2XSZDmsA/xensokC21Pv9T3J4wcWrq17gob1er7tEhMcJuYsfGoS3hdTweuBpxaM0iCJph8fLuX7DJMPWnI2GOzi8YOKseD4gB+RSQezMRRx5vRPEn88Sz7IIx8KHgT3FCBniWJUyke6o8/uXc3jBxIKTd7vdTsFJfkSo38NbCY/vPRsOPwt81KgLqeoBXc+sBjZsxLF4ZfgM7goqSqMRL1S7oOSrq6sdLodjH0rYfbyByPEOePwZ4CO8Liv3RCL70Wctr8+mA2NkT53P91iu92aCFYx8TU1NpbOi8gfs2R7iDYLxnXqYPg3c5Fm+Xygcbs/omXXATZGBBagQqNAe9Psf4d+ZiVwQ8qjqFVVl5dmi9ShvDEL90IieXtVDevic5ruOyYiAXYiA9YSxsZow0YnSKkKFjoAn8OAENsPGjKs9qnp5iSDuBXFLXsLjR4fSIy29vb2DU7UThW4d8n0zxjXtRVAYNaJnlocikWNTHZPvP1PPl2LLujM3cfbzwJXUyukQzxrZraptRCcbEDm60Wh4S0IE7McByVJQjf3yac+EfEm9ouxAcWu2TsS6koOplr6+vstWXf5IKBrejBR4ybIAlLpE1JE6j8eyh8h/dEKmS95e7w9sy57G+MkQ6sdYMrmiv79/gNdNR0YEbGKUvIIFQMRffRBtbkG0HQj6fHdcRafWmg55Gzy+BR5vtUzF2O96kjSH4nHNopsB0B0Ob6SEvcYvAPYS1UwQDyqLFcu5IZ/pTMUkjxfEoD/wLVY9+z02PXDL8RE9s0y9qMZNigIJcU37TZblfj7aUAMqURLXuqqq9sQHBi5NZbqpkBfh8a9BPLtDMz3wyImh9GhTLBab0uSmQfIQcNQ95pJkDVG3wtgdC1KFA+HaSodjdzKZ/Neou1Y7X/JC0K98BeIvWAdjp+jwUKN6/nyfVVd4JK4lunDrkwJhc6Gl1GGjwhqnLO3UNC2Rz8z5kKfw+EYQf5EfEKF+Wh+kDd0XYxd43WzKiIBfEAEjiIAm0zyUSFiU1XJF+feJy5evW3euR57C41+A+MumSbICY2dGmd6gnlPPWXRFABABP7llCXsA2mCcDjVAJoK4qryycsfAwEDSqOPb1yQPj38O4q/yL4F4aCiTXhqNRmMWXREBFMGjslOywUbToQeyyy4IrVVO53bUgEk/uZOSr/MHPsOd0hs8F4R6mI2ONKi9vRFeNxdyIqkddknOMhA2nyuy+wAqtEol8rbEYCLnZisneXj8UxB/00KGkUiGsqU90WiPRTeHACLgoNsp4eBDHzaagRS4RbCzle6ysq3xVIq/LiMW8ti5fYRVfMs4yFibsdgI05eqqhqy6OYBEE9qnSiCLhRB7tRHFzDR1oIasBU1wHTAMpHHjcmHIP4OzwXf8XMkk24IR6NneN18klEE97mc0gJwuN9oF+SFNlF8vNJR1YYacGVcN0Eet6XvY6Pw3rhi/Bc5fiEzShp7eiOnx7H5/IsI6EAELEIE3Gu0EymwyCbQZocktWEfMHa3MEa+zqe8KwjCB8bO/7f70kxvVGPqyRy6eQshAtpdsuTDN/9us5F0MQ4zTS5BaIsPDQ3jO+5/G+fjj82dIDF2CZeKjd3R6J8W3Y0BYFca+JJQssFqLuvSUqlmESHSiZywGzsgx+OZNFnWE4scN+I3WJshAnYjAm5FBNxptp16y+y2hICLEtOVMXJcI0xvDveGi/ofU7NxBZN0XIpuIIy0mUZkZNNZVf1kDAt6lZagEhjGnxbweh8wdbw5hOwdxHbwY/j9BpTM9xi4MGzFvZhpk3Bz8J5gkb19ym7cJr5w/wEmUjzJqoNVhwAAAABJRU5ErkJggg=="
|
||||
// swiftlint:enable line_length
|
||||
|
||||
if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) {
|
||||
Static.keyboardUpImage = UIImage(data: data, scale: 3)
|
||||
}
|
||||
|
||||
// Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
|
||||
Static.keyboardUpImage = Static.keyboardUpImage?.imageFlippedForRightToLeftLayoutDirection()
|
||||
}
|
||||
|
||||
return Static.keyboardUpImage
|
||||
}
|
||||
|
||||
static func keyboardNextImage() -> UIImage? {
|
||||
|
||||
struct Static {
|
||||
static var keyboardDownImage: UIImage?
|
||||
}
|
||||
|
||||
if Static.keyboardDownImage == nil {
|
||||
|
||||
// swiftlint:disable line_length
|
||||
let base64Data = "iVBORw0KGgoAAAANSUhEUgAAAD8AAAAkCAYAAAA+TuKHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAAGp0lEQVRoBd1ZCWhcRRiemff25WrydmOtuXbfZlMo4lEpKkppm6TpZUovC4UqKlQoUhURqQcUBcWDIkhVUCuI9SpJa+2h0VZjUawUEUUUirLNXqmxSnc32WaT7O4bv0nd5R1bc+2maR8s7z9m5v+/+f/5Z94sIf89jW73Yp/bfUuWvwLfDp/H8zhwObLYmCCaPJ6FjLJPCWNHNU1bkFVeQW/Zp2l7KWUvNmlaB3DJAhvz1ntvI5R1EUpnUUKdEifHGuvr519BwKUmj/cDYNtwARNd5/NoH4GWKIhzlFKXCSzn/xCut/jD4V9N8suPYYj4ewC+2e46f55Rwp/geExKSmdzJn2l1WrXmuSXF8MQ8XfyAeeEn9KTyV3MHwq9RTh50IqLEjJHUkh3Y13dPKvuMuApIr6bUHKP1VeE+Y8MIa09Z8/+JQlltD/+Q7VaFcW6X2VsjFmbRRnbUFFZeai/v/+cUTeDaYqIv4GlfL/NR879I3qmORwOnxG6UfCCiMbjJ51VagKdlgs+91BaKVO6oVJVD8bj8WhOPkMJn1t7jTL6gNU9pHpgKJ1q7u3tjWR1OfBCEOuPf+9Sq4YwAW3ZBqNvSqsYpeuc5WUHYolE3KSbQYzP430FwB+yuoSCFtKHaXP4z3DIqDOBFwpkwHfVThXLgrYaG6IGOAmT1pZVVHw8MDDQb9TNBLrJre0E8EdtvnAeSRPeHOwN9lh1NvCiASbgG5fqRLDJEmMHsSU6GFuDGrAfNWDAqLuUNE5uL6A2bbf5wPkZrmdaAuGw36aDIC940TAajx1HBijIgEWmjpRWS4ytrnKq+1EDEibdJWAa3dqzjLGnrKaxxvt4OtXS09v7u1WX5S8KXjRABnQ7VbUCEV+Y7SDeWAJX4dfuLCnZFzt//rxRN500jqo74NvTVptY42fTnLcGI5FTVp2R/1/womEsHj/mwgxg27vd2BH8bCrLq0rKyjoTicSgUTcdNIrbkwD+nM2WOJ3qmaVI9d9sOotgTPCiPTLgi+oqdTbOAbea+lM6xyHLK8pnVXSiCCZNuiIyjZr2GArSS1YTOKie45n0UqT6L1ZdPn5c4EVHHIS6sA3WYLZvNg6E9L9GZmwZzgEdqAFDRl0xaET8EQB/2To21ngsQ0kbIv6zVXcxftzgxQDIgM+qVbUeGbDAPCCtxbfxUhdjHdGhoWGzrnAcIr4NwHflGbGf6PqyQCj0Yx7dRUUTAi9GwQQccapOL7bBm4yjIiPqSElpC5VYRzKZLPgE4M5hK0rt67CDZDM9A+k0XxmIhE6apONgJgxejBmLxw65VHUu/LjRaANeNZQpyhJZUToGBwdHjLqp0Ij4FgB/0wocaxw7DV8F4CcmM/6kwMMQRwYcrFad87DvXW8yTKlbkZVFSmlJB3bBlEk3CQYRvxfA3wbw0Vun7BAAPqjrmfaecPjbrGyib2sKTbS/LG5F4NhGe0d+fDiTuSMSiUx6F8Bn6V343N6TB3gSyb/aHwx22+2OX2KazfF3y7VMnw4FcUvCP8lJcgRtVph0yEu8pTnRBAiv270JwN+1AscQw5zr66YKXLgyVfBijBQc2YQ0PCIY4wPH2yQPERNTYpSPRSPid0qUvY/+1mU5QjJ8PVL96FhjjEdfCPDCzggyAKnPP7cZpWQFlsZ+yPGdMPaDiK/F6fEjbKeypXVK5/pGfyTYZZFPmi0UeOHAcCZI1+Oa6JjVG0SwHbcrnZDn7sytbQSPiLdLTBJXy+Z2nKcR8U09odDhfP0mKyskeBIggaERPb0WGfC1zSFK1gDcXsitER1t6m3wrkTEbRmC5ZTRCd+MiB+wjTlFwVSrfV7zdXV15aWy0oWKvNjWgJMOfyiAIklwYXLhwfd4G/47OAxnTMVRAKec3u0PB8SkFfyxFpSCGMBHTkpWHPsU2bEEKe8xDUrJdfhKnItzgiiEXKvXWhijR9CuzNgOwHWc1+87HQ5+aJQXki4KeOGgOOFJDkdnqeJowSGlweg00vsGHJAa1UpnTJKIAF5u1AM4R8S3APgeo7zQdFHS3uikz+VSSWXVlwBo+hoUbUR0ITfVHQEcEd+K4rbbOE4xaJPhYhg4HY3GcYG4HFB/so5vBT6q53TbdAAXtooe+SzghoaGakWSu2FwflZmfWMffxjAX7XKi8VPG3gBoKam5uoKpeQEDjBz7YD4dpwUd9rlxZMUPe2Nrvf19f2dTKdasap7jHIsiR3TDdxsfxq5xtpazad5g02al+Na6plpND0zTHk8Hp+4iLyU3vwLp0orLWXqrZQAAAAASUVORK5CYII="
|
||||
// swiftlint:enable line_length
|
||||
|
||||
if let data = Data(base64Encoded: base64Data, options: .ignoreUnknownCharacters) {
|
||||
Static.keyboardDownImage = UIImage(data: data, scale: 3)
|
||||
}
|
||||
|
||||
// Support for RTL languages like Arabic, Persia etc... (Bug ID: #448)
|
||||
Static.keyboardDownImage = Static.keyboardDownImage?.imageFlippedForRightToLeftLayoutDirection()
|
||||
}
|
||||
|
||||
return Static.keyboardDownImage
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
UIView category methods to add IQToolbar on UIKeyboard.
|
||||
*/
|
||||
@available(iOSApplicationExtension, unavailable)
|
||||
@objc public extension UIView {
|
||||
|
||||
private struct AssociatedKeys {
|
||||
static var keyboardToolbar: Int = 0
|
||||
static var shouldHideToolbarPlaceholder: Int = 0
|
||||
static var toolbarPlaceholder: Int = 0
|
||||
}
|
||||
|
||||
// MARK: Toolbar
|
||||
|
||||
/**
|
||||
IQToolbar references for better customization control.
|
||||
*/
|
||||
var toolbar: IQToolbar {
|
||||
var toolbar: IQToolbar? = base.inputAccessoryView as? IQToolbar
|
||||
var keyboardToolbar: IQToolbar {
|
||||
var toolbar = inputAccessoryView as? IQToolbar
|
||||
|
||||
if toolbar == nil {
|
||||
toolbar = objc_getAssociatedObject(base, &AssociatedKeys.toolbar) as? IQToolbar
|
||||
toolbar = objc_getAssociatedObject(self, &AssociatedKeys.keyboardToolbar) as? IQToolbar
|
||||
}
|
||||
|
||||
if let unwrappedToolbar: IQToolbar = toolbar {
|
||||
if let unwrappedToolbar = toolbar {
|
||||
return unwrappedToolbar
|
||||
} else {
|
||||
|
||||
let width: CGFloat
|
||||
|
||||
var width: CGFloat = 0
|
||||
|
||||
if #available(iOS 13.0, *) {
|
||||
width = base.window?.windowScene?.screen.bounds.width ?? 0
|
||||
width = window?.windowScene?.screen.bounds.width ?? .zero
|
||||
} else {
|
||||
width = UIScreen.main.bounds.width
|
||||
}
|
||||
|
||||
|
||||
let frame = CGRect(origin: .zero, size: .init(width: width, height: 44))
|
||||
let newToolbar = IQToolbar(frame: frame)
|
||||
|
||||
objc_setAssociatedObject(base, &AssociatedKeys.toolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.keyboardToolbar, newToolbar, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
|
||||
return newToolbar
|
||||
}
|
||||
@ -71,43 +163,41 @@ public extension IQKeyboardManagerWrapper where Base: UIView {
|
||||
// MARK: Toolbar title
|
||||
|
||||
/**
|
||||
If `hideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO.
|
||||
*/
|
||||
var hidePlaceholder: Bool {
|
||||
If `shouldHideToolbarPlaceholder` is YES, then title will not be added to the toolbar. Default to NO.
|
||||
*/
|
||||
var shouldHideToolbarPlaceholder: Bool {
|
||||
get {
|
||||
return objc_getAssociatedObject(base, &AssociatedKeys.hidePlaceholder) as? Bool ?? false
|
||||
return objc_getAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder) as? Bool ?? false
|
||||
}
|
||||
set(newValue) {
|
||||
objc_setAssociatedObject(base, &AssociatedKeys.hidePlaceholder,
|
||||
newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
toolbar.titleBarButton.title = drawingPlaceholder
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.shouldHideToolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
`toolbarPlaceholder` to override default `placeholder` text when drawing text on toolbar.
|
||||
*/
|
||||
var placeholder: String? {
|
||||
var toolbarPlaceholder: String? {
|
||||
get {
|
||||
return objc_getAssociatedObject(base, &AssociatedKeys.placeholder) as? String
|
||||
return objc_getAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder) as? String
|
||||
}
|
||||
set(newValue) {
|
||||
objc_setAssociatedObject(base, &AssociatedKeys.placeholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
toolbar.titleBarButton.title = drawingPlaceholder
|
||||
objc_setAssociatedObject(self, &AssociatedKeys.toolbarPlaceholder, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
|
||||
self.keyboardToolbar.titleBarButton.title = self.drawingToolbarPlaceholder
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
`drawingToolbarPlaceholder` will be actual text used to draw on toolbar.
|
||||
This would either `placeholder` or `toolbarPlaceholder`.
|
||||
`drawingToolbarPlaceholder` will be actual text used to draw on toolbar. This would either `placeholder` or `toolbarPlaceholder`.
|
||||
*/
|
||||
var drawingPlaceholder: String? {
|
||||
var drawingToolbarPlaceholder: String? {
|
||||
|
||||
if hidePlaceholder {
|
||||
if self.shouldHideToolbarPlaceholder {
|
||||
return nil
|
||||
} else if placeholder?.isEmpty == false {
|
||||
return placeholder
|
||||
} else if let placeholderable: IQPlaceholderable = base as? IQPlaceholderable {
|
||||
} else if self.toolbarPlaceholder?.isEmpty == false {
|
||||
return self.toolbarPlaceholder
|
||||
} else if let placeholderable: IQPlaceholderable = self as? IQPlaceholderable {
|
||||
|
||||
if let placeholder = placeholderable.attributedPlaceholder?.string,
|
||||
!placeholder.isEmpty {
|
||||
@ -122,81 +212,160 @@ public extension IQKeyboardManagerWrapper where Base: UIView {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: Private helper
|
||||
|
||||
private static func flexibleBarButtonItem () -> IQBarButtonItem {
|
||||
|
||||
struct Static {
|
||||
|
||||
static let nilButton = IQBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
|
||||
}
|
||||
|
||||
Static.nilButton.isSystemItem = true
|
||||
return Static.nilButton
|
||||
}
|
||||
|
||||
// MARK: Common
|
||||
|
||||
// swiftlint:disable cyclomatic_complexity
|
||||
// swiftlint:disable function_body_length
|
||||
func addToolbar(target: AnyObject?,
|
||||
previousConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
nextConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
rightConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
title: String?,
|
||||
titleAccessibilityLabel: String? = nil) {
|
||||
func addKeyboardToolbarWithTarget(target: AnyObject?,
|
||||
titleText: String?,
|
||||
titleAccessibilityLabel: String? = nil,
|
||||
rightBarButtonConfiguration: IQBarButtonItemConfiguration?,
|
||||
previousBarButtonConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
nextBarButtonConfiguration: IQBarButtonItemConfiguration? = nil) {
|
||||
|
||||
// If can't set InputAccessoryView. Then return
|
||||
if base.responds(to: #selector(setter: UITextField.inputAccessoryView)) {
|
||||
if self.responds(to: #selector(setter: UITextField.inputAccessoryView)) {
|
||||
|
||||
// Creating a toolBar for phoneNumber keyboard
|
||||
let toolbar: IQToolbar = toolbar
|
||||
let toolbar = self.keyboardToolbar
|
||||
|
||||
var items: [UIBarButtonItem] = []
|
||||
var items: [IQBarButtonItem] = []
|
||||
|
||||
if let previousConfiguration: IQBarButtonItemConfiguration = previousConfiguration {
|
||||
if let prevConfig = previousBarButtonConfiguration {
|
||||
|
||||
var prev = toolbar.previousBarButton
|
||||
|
||||
if prevConfig.barButtonSystemItem == nil, !prev.isSystemItem {
|
||||
prev.title = prevConfig.title
|
||||
prev.accessibilityLabel = prevConfig.accessibilityLabel
|
||||
prev.accessibilityIdentifier = prev.accessibilityLabel
|
||||
prev.image = prevConfig.image
|
||||
prev.target = target
|
||||
prev.action = prevConfig.action
|
||||
} else {
|
||||
if let systemItem = prevConfig.barButtonSystemItem {
|
||||
prev = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: prevConfig.action)
|
||||
prev.isSystemItem = true
|
||||
} else if let image = prevConfig.image {
|
||||
prev = IQBarButtonItem(image: image, style: .plain, target: target, action: prevConfig.action)
|
||||
} else {
|
||||
prev = IQBarButtonItem(title: prevConfig.title, style: .plain, target: target, action: prevConfig.action)
|
||||
}
|
||||
|
||||
prev.invocation = toolbar.previousBarButton.invocation
|
||||
prev.accessibilityLabel = prevConfig.accessibilityLabel
|
||||
prev.accessibilityIdentifier = prev.accessibilityLabel
|
||||
prev.isEnabled = toolbar.previousBarButton.isEnabled
|
||||
prev.tag = toolbar.previousBarButton.tag
|
||||
toolbar.previousBarButton = prev
|
||||
}
|
||||
|
||||
let prev: IQBarButtonItem = previousConfiguration.apply(on: toolbar.previousBarButton, target: target)
|
||||
toolbar.previousBarButton = prev
|
||||
items.append(prev)
|
||||
}
|
||||
|
||||
if previousConfiguration != nil, nextConfiguration != nil {
|
||||
if previousBarButtonConfiguration != nil, nextBarButtonConfiguration != nil {
|
||||
|
||||
items.append(toolbar.fixedSpaceBarButton)
|
||||
}
|
||||
|
||||
if let nextConfiguration: IQBarButtonItemConfiguration = nextConfiguration {
|
||||
if let nextConfig = nextBarButtonConfiguration {
|
||||
|
||||
var next = toolbar.nextBarButton
|
||||
|
||||
if nextConfig.barButtonSystemItem == nil, !next.isSystemItem {
|
||||
next.title = nextConfig.title
|
||||
next.accessibilityLabel = nextConfig.accessibilityLabel
|
||||
next.accessibilityIdentifier = next.accessibilityLabel
|
||||
next.image = nextConfig.image
|
||||
next.target = target
|
||||
next.action = nextConfig.action
|
||||
} else {
|
||||
if let systemItem = nextConfig.barButtonSystemItem {
|
||||
next = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: nextConfig.action)
|
||||
next.isSystemItem = true
|
||||
} else if let image = nextConfig.image {
|
||||
next = IQBarButtonItem(image: image, style: .plain, target: target, action: nextConfig.action)
|
||||
} else {
|
||||
next = IQBarButtonItem(title: nextConfig.title, style: .plain, target: target, action: nextConfig.action)
|
||||
}
|
||||
|
||||
next.invocation = toolbar.nextBarButton.invocation
|
||||
next.accessibilityLabel = nextConfig.accessibilityLabel
|
||||
next.accessibilityIdentifier = next.accessibilityLabel
|
||||
next.isEnabled = toolbar.nextBarButton.isEnabled
|
||||
next.tag = toolbar.nextBarButton.tag
|
||||
toolbar.nextBarButton = next
|
||||
}
|
||||
|
||||
let next: IQBarButtonItem = nextConfiguration.apply(on: toolbar.nextBarButton, target: target)
|
||||
toolbar.nextBarButton = next
|
||||
items.append(next)
|
||||
}
|
||||
|
||||
if !toolbar.additionalLeadingItems.isEmpty {
|
||||
items.append(contentsOf: toolbar.additionalLeadingItems)
|
||||
}
|
||||
|
||||
// Title bar button item
|
||||
do {
|
||||
// Flexible space
|
||||
items.append(IQBarButtonItem.flexibleBarButtonItem)
|
||||
items.append(UIView.flexibleBarButtonItem())
|
||||
|
||||
// Title button
|
||||
toolbar.titleBarButton.title = title
|
||||
toolbar.titleBarButton.title = titleText
|
||||
toolbar.titleBarButton.accessibilityLabel = titleAccessibilityLabel
|
||||
toolbar.titleBarButton.accessibilityIdentifier = titleAccessibilityLabel
|
||||
|
||||
toolbar.titleBarButton.customView?.frame = .zero
|
||||
toolbar.titleBarButton.customView?.frame = CGRect.zero
|
||||
|
||||
items.append(toolbar.titleBarButton)
|
||||
|
||||
// Flexible space
|
||||
items.append(IQBarButtonItem.flexibleBarButtonItem)
|
||||
items.append(UIView.flexibleBarButtonItem())
|
||||
}
|
||||
|
||||
if !toolbar.additionalTrailingItems.isEmpty {
|
||||
items.append(contentsOf: toolbar.additionalTrailingItems)
|
||||
}
|
||||
if let rightConfig = rightBarButtonConfiguration {
|
||||
|
||||
if let rightConfiguration: IQBarButtonItemConfiguration = rightConfiguration {
|
||||
var done = toolbar.doneBarButton
|
||||
|
||||
if rightConfig.barButtonSystemItem == nil, !done.isSystemItem {
|
||||
done.title = rightConfig.title
|
||||
done.accessibilityLabel = rightConfig.accessibilityLabel
|
||||
done.accessibilityIdentifier = done.accessibilityLabel
|
||||
done.image = rightConfig.image
|
||||
done.target = target
|
||||
done.action = rightConfig.action
|
||||
} else {
|
||||
if let systemItem = rightConfig.barButtonSystemItem {
|
||||
done = IQBarButtonItem(barButtonSystemItem: systemItem, target: target, action: rightConfig.action)
|
||||
done.isSystemItem = true
|
||||
} else if let image = rightConfig.image {
|
||||
done = IQBarButtonItem(image: image, style: .plain, target: target, action: rightConfig.action)
|
||||
} else {
|
||||
done = IQBarButtonItem(title: rightConfig.title, style: .plain, target: target, action: rightConfig.action)
|
||||
}
|
||||
|
||||
done.invocation = toolbar.doneBarButton.invocation
|
||||
done.accessibilityLabel = rightConfig.accessibilityLabel
|
||||
done.accessibilityIdentifier = done.accessibilityLabel
|
||||
done.isEnabled = toolbar.doneBarButton.isEnabled
|
||||
done.tag = toolbar.doneBarButton.tag
|
||||
toolbar.doneBarButton = done
|
||||
}
|
||||
|
||||
let done: IQBarButtonItem = rightConfiguration.apply(on: toolbar.doneBarButton, target: target)
|
||||
toolbar.doneBarButton = done
|
||||
items.append(done)
|
||||
}
|
||||
|
||||
// Adding button to toolBar.
|
||||
toolbar.items = items
|
||||
|
||||
if let textInput: UITextInput = base as? UITextInput {
|
||||
if let textInput = self as? UITextInput {
|
||||
switch textInput.keyboardAppearance {
|
||||
case .dark?:
|
||||
toolbar.barStyle = .black
|
||||
@ -206,120 +375,139 @@ public extension IQKeyboardManagerWrapper where Base: UIView {
|
||||
}
|
||||
|
||||
// Setting toolbar to keyboard.
|
||||
let reloadInputViews: Bool = base.inputAccessoryView != toolbar
|
||||
if reloadInputViews {
|
||||
if let textField: UITextField = base as? UITextField {
|
||||
textField.inputAccessoryView = toolbar
|
||||
} else if let textView: UITextView = base as? UITextView {
|
||||
textView.inputAccessoryView = toolbar
|
||||
}
|
||||
base.reloadInputViews()
|
||||
let shouldReloadInputViews: Bool = self.inputAccessoryView == nil
|
||||
if let textField = self as? UITextField {
|
||||
textField.inputAccessoryView = toolbar
|
||||
} else if let textView = self as? UITextView {
|
||||
textView.inputAccessoryView = toolbar
|
||||
}
|
||||
if shouldReloadInputViews {
|
||||
self.reloadInputViews()
|
||||
}
|
||||
}
|
||||
}
|
||||
// swiftlint:enable function_body_length
|
||||
// swiftlint:enable cyclomatic_complexity
|
||||
|
||||
// MARK: Right
|
||||
func addDone(target: AnyObject?,
|
||||
action: Selector,
|
||||
showPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let title: String? = showPlaceholder ? drawingPlaceholder : nil
|
||||
func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addDone(target: target, action: action,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
addDoneOnKeyboardWithTarget(target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addDone(target: AnyObject?,
|
||||
action: Selector,
|
||||
title: String?, titleAccessibilityLabel: String? = nil) {
|
||||
func addDoneOnKeyboardWithTarget(_ target: AnyObject?, action: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(systemItem: .done, action: action)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: action)
|
||||
|
||||
addToolbar(target: target, rightConfiguration: rightConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, rightBarButtonConfiguration: rightConfiguration)
|
||||
}
|
||||
|
||||
func addRightButton(target: AnyObject?,
|
||||
configuration: IQBarButtonItemConfiguration,
|
||||
showPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
let title: String? = showPlaceholder ? drawingPlaceholder : nil
|
||||
addRightButton(target: target, configuration: configuration, title: title,
|
||||
titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addRightButtonOnKeyboardWithImage(image, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addRightButton(target: AnyObject?,
|
||||
configuration: IQBarButtonItemConfiguration,
|
||||
title: String?, titleAccessibilityLabel: String? = nil) {
|
||||
addToolbar(target: target, rightConfiguration: configuration, title: title,
|
||||
titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
func addRightButtonOnKeyboardWithImage(_ image: UIImage, target: AnyObject?, action: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(image: image, action: action)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration)
|
||||
}
|
||||
|
||||
func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addRightButtonOnKeyboardWithText(text, target: target, action: action, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addRightButtonOnKeyboardWithText(_ text: String, target: AnyObject?, action: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(title: text, action: action)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration)
|
||||
}
|
||||
|
||||
// MARK: Right/Left
|
||||
func addRightLeft(target: AnyObject?,
|
||||
rightConfiguration: IQBarButtonItemConfiguration, leftConfiguration: IQBarButtonItemConfiguration,
|
||||
showPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
let title: String? = showPlaceholder ? drawingPlaceholder : nil
|
||||
addRightLeft(target: target,
|
||||
rightConfiguration: rightConfiguration, leftConfiguration: leftConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
|
||||
func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addCancelDoneOnKeyboardWithTarget(target, cancelAction: cancelAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addRightLeft(target: AnyObject?,
|
||||
rightConfiguration: IQBarButtonItemConfiguration, leftConfiguration: IQBarButtonItemConfiguration,
|
||||
title: String?, titleAccessibilityLabel: String? = nil) {
|
||||
addToolbar(target: target,
|
||||
previousConfiguration: leftConfiguration, rightConfiguration: rightConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addRightLeftOnKeyboardWithTarget(target, leftButtonTitle: leftButtonTitle, rightButtonTitle: rightButtonTitle, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addRightLeftOnKeyboardWithTarget(target, leftButtonImage: leftButtonImage, rightButtonImage: rightButtonImage, leftButtonAction: leftButtonAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addCancelDoneOnKeyboardWithTarget(_ target: AnyObject?, cancelAction: Selector, doneAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let leftConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .cancel, action: cancelAction)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
|
||||
}
|
||||
|
||||
func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonTitle: String, rightButtonTitle: String, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let leftConfiguration = IQBarButtonItemConfiguration(title: leftButtonTitle, action: leftButtonAction)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
|
||||
}
|
||||
|
||||
func addRightLeftOnKeyboardWithTarget(_ target: AnyObject?, leftButtonImage: UIImage, rightButtonImage: UIImage, leftButtonAction: Selector, rightButtonAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let leftConfiguration = IQBarButtonItemConfiguration(image: leftButtonImage, action: leftButtonAction)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: leftConfiguration)
|
||||
}
|
||||
|
||||
// MARK: Previous/Next/Right
|
||||
|
||||
func addPreviousNextRight(target: AnyObject?,
|
||||
previousConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
nextConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
rightConfiguration: IQBarButtonItemConfiguration?,
|
||||
showPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let title: String? = showPlaceholder ? drawingPlaceholder : nil
|
||||
addPreviousNextRight(target: target,
|
||||
previousConfiguration: previousConfiguration, nextConfiguration: nextConfiguration,
|
||||
rightConfiguration: rightConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
addPreviousNextDoneOnKeyboardWithTarget(target, previousAction: previousAction, nextAction: nextAction, doneAction: doneAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addPreviousNextRight(target: AnyObject?,
|
||||
previousConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
nextConfiguration: IQBarButtonItemConfiguration? = nil,
|
||||
rightConfiguration: IQBarButtonItemConfiguration?,
|
||||
title: String?, titleAccessibilityLabel: String? = nil) {
|
||||
func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addToolbar(target: target,
|
||||
previousConfiguration: previousConfiguration, nextConfiguration: nextConfiguration,
|
||||
rightConfiguration: rightConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
addPreviousNextRightOnKeyboardWithTarget(target, rightButtonImage: rightButtonImage, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addPreviousNextDone(target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector,
|
||||
showPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
let title: String? = showPlaceholder ? drawingPlaceholder : nil
|
||||
addPreviousNextDone(target: target, previousAction: previousAction, nextAction: nextAction,
|
||||
doneAction: doneAction,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, shouldShowPlaceholder: Bool = false, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
addPreviousNextRightOnKeyboardWithTarget(target, rightButtonTitle: rightButtonTitle, previousAction: previousAction, nextAction: nextAction, rightButtonAction: rightButtonAction, titleText: (shouldShowPlaceholder ? self.drawingToolbarPlaceholder: nil), titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
}
|
||||
|
||||
func addPreviousNextDone(target: AnyObject?,
|
||||
previousAction: Selector, nextAction: Selector, doneAction: Selector,
|
||||
title: String?, titleAccessibilityLabel: String? = nil) {
|
||||
func addPreviousNextDoneOnKeyboardWithTarget (_ target: AnyObject?, previousAction: Selector, nextAction: Selector, doneAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let previousConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage,
|
||||
action: previousAction)
|
||||
let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage, action: nextAction)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(systemItem: .done, action: doneAction)
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(barButtonSystemItem: .done, action: doneAction)
|
||||
let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
|
||||
let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
|
||||
|
||||
addToolbar(target: target, previousConfiguration: previousConfiguration,
|
||||
nextConfiguration: nextConfiguration, rightConfiguration: rightConfiguration,
|
||||
title: title, titleAccessibilityLabel: titleAccessibilityLabel)
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
|
||||
}
|
||||
|
||||
func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonImage: UIImage, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(image: rightButtonImage, action: rightButtonAction)
|
||||
let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
|
||||
let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
|
||||
}
|
||||
|
||||
func addPreviousNextRightOnKeyboardWithTarget(_ target: AnyObject?, rightButtonTitle: String, previousAction: Selector, nextAction: Selector, rightButtonAction: Selector, titleText: String?, titleAccessibilityLabel: String? = nil) {
|
||||
|
||||
let rightConfiguration = IQBarButtonItemConfiguration(title: rightButtonTitle, action: rightButtonAction)
|
||||
let nextConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardNextImage() ?? UIImage(), action: nextAction)
|
||||
let prevConfiguration = IQBarButtonItemConfiguration(image: UIImage.keyboardPreviousImage() ?? UIImage(), action: previousAction)
|
||||
|
||||
addKeyboardToolbarWithTarget(target: target, titleText: titleText, titleAccessibilityLabel: titleAccessibilityLabel, rightBarButtonConfiguration: rightConfiguration, previousBarButtonConfiguration: prevConfiguration, nextBarButtonConfiguration: nextConfiguration)
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,20 +3,7 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSPrivacyCollectedDataTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSPrivacyCollectedDataType</key>
|
||||
<string></string>
|
||||
<key>NSPrivacyCollectedDataTypeLinked</key>
|
||||
<false/>
|
||||
<key>NSPrivacyCollectedDataTypeTracking</key>
|
||||
<false/>
|
||||
<key>NSPrivacyCollectedDataTypePurposes</key>
|
||||
<array>
|
||||
<string></string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
<array/>
|
||||
<key>NSPrivacyTracking</key>
|
||||
<false/>
|
||||
</dict>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2013-2023 Iftekhar Qurashi
|
||||
Copyright (c) 2013-2017 Iftekhar Qurashi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@ -61,26 +61,19 @@ https://www.youtube.com/playlist?list=PL_csAAO9PQ8aTL87XnueOXi3RpWE2m_8v
|
||||
|
||||
| | Language | Minimum iOS Target | Minimum Xcode Version |
|
||||
|------------------------|----------|--------------------|-----------------------|
|
||||
| IQKeyboardManager | Obj-C | iOS 11.0 | Xcode 13 |
|
||||
| IQKeyboardManagerSwift | Swift | iOS 13.0 | Xcode 13 |
|
||||
| Demo Project | | | Xcode 15 |
|
||||
| IQKeyboardManager | Obj-C | iOS 8.0 | Xcode 9 |
|
||||
| IQKeyboardManagerSwift | Swift | iOS 8.0 | Xcode 9 |
|
||||
| Demo Project | | | Xcode 11 |
|
||||
|
||||
#### Swift versions support
|
||||
|
||||
| Swift | Xcode | IQKeyboardManagerSwift |
|
||||
|-------------------|-------|------------------------|
|
||||
| 5.9, 5.8, 5.7, 5.6| 15 | >= 7.0.0 |
|
||||
| 5.5, 5.4, 5.3, 5.2, 5.1, 5.0, 4.2| 11 | >= 6.5.7 |
|
||||
| 5.1, 5.0, 4.2, 4.0, 3.2, 3.0| 11 | >= 6.5.0 |
|
||||
| 5.0,4.2, 4.0, 3.2, 3.0| 10.2 | >= 6.2.1 |
|
||||
| 5.1, 5.0, 4.2, 4.0, 3.2, 3.0| 11 | >= 6.5.0 |
|
||||
| 5.0,4.2, 4.0, 3.2, 3.0| 10.2 | >= 6.2.1 |
|
||||
| 4.2, 4.0, 3.2, 3.0| 10.0 | >= 6.0.4 |
|
||||
| 4.0, 3.2, 3.0 | 9.0 | 5.0.0 |
|
||||
|
||||
## 7.0.0 version notes
|
||||
- In this major release, a lot of variables and functions have been moved here and there. We have mentioned most of the major things in the MIGRATION GUIDE. So please take a look to make changes in your project when upgrading to this version.
|
||||
- The 7.0.0 version adopted the latest Swift Concurrency/Actor feature and only available iOS 13.0 and above.
|
||||
- Internal keyboard management handling have been updated with a different and better approach than legacy versions. However when adopting 7.0.0, please verify if it is working as expected in your apps, if there are any serious problems with 7.0.0 please open an issue with all the details and switch back to legacy version temporarily.
|
||||
|
||||
Installation
|
||||
==========================
|
||||
|
||||
@ -92,13 +85,13 @@ Installation
|
||||
it, simply add the following line to your Podfile: ([#9](https://github.com/hackiftekhar/IQKeyboardManager/issues/9))
|
||||
|
||||
```ruby
|
||||
pod 'IQKeyboardManager' #iOS13 and later
|
||||
pod 'IQKeyboardManager' #iOS8 and later
|
||||
```
|
||||
|
||||
***IQKeyboardManager (Swift):*** IQKeyboardManagerSwift is available through [CocoaPods](http://cocoapods.org). To install
|
||||
it, simply add the following line to your Podfile: ([#236](https://github.com/hackiftekhar/IQKeyboardManager/issues/236))
|
||||
|
||||
*Swift 5.9, 5.8, 5.7, 5.6, 5.5 (Xcode 15)*
|
||||
*Swift 5.1, 5.0, 4.2, 4.0, 3.2, 3.0 (Xcode 11)*
|
||||
|
||||
```ruby
|
||||
pod 'IQKeyboardManagerSwift'
|
||||
@ -180,7 +173,21 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
[Swift Package Manager(SPM)](https://swift.org/package-manager/) is Apple's dependency manager tool. It is now supported in Xcode 11. So it can be used in all appleOS types of projects. It can be used alongside other tools like CocoaPods and Carthage as well.
|
||||
|
||||
To install IQKeyboardManagerSwift package via Xcode
|
||||
To install IQKeyboardManager package into your packages, add a reference to IQKeyboardManager and a targeting release version in the dependencies section in `Package.swift` file:
|
||||
|
||||
```swift
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "YOUR_PROJECT_NAME",
|
||||
products: [],
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/hackiftekhar/IQKeyboardManager.git", from: "6.5.0")
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
To install IQKeyboardManager package via Xcode
|
||||
|
||||
* Go to File -> Swift Packages -> Add Package Dependency...
|
||||
* Then search for https://github.com/hackiftekhar/IQKeyboardManager.git
|
||||
@ -189,7 +196,6 @@ To install IQKeyboardManagerSwift package via Xcode
|
||||
Migration Guide
|
||||
==========================
|
||||
- [IQKeyboardManager 6.0.0 Migration Guide](https://github.com/hackiftekhar/IQKeyboardManager/wiki/IQKeyboardManager-6.0.0-Migration-Guide)
|
||||
- [IQKeyboardManager 7.0.0 Migration Guide](https://github.com/hackiftekhar/IQKeyboardManager/wiki/IQKeyboardManager-7.0.0-Migration-Guide)
|
||||
|
||||
Other Links
|
||||
==========================
|
||||
|
||||
@ -428,7 +428,7 @@ extension JXSegmentedListContainerView: UICollectionViewDataSource, UICollection
|
||||
}
|
||||
|
||||
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
||||
guard scrollView.isTracking || scrollView.isDragging else {
|
||||
guard scrollView.isTracking || scrollView.isDragging || scrollView.isDecelerating else {
|
||||
return
|
||||
}
|
||||
let percent = scrollView.contentOffset.x/scrollView.bounds.size.width
|
||||
|
||||
@ -99,4 +99,20 @@ open class JXSegmentedBaseCell: UICollectionViewCell, JXSegmentedViewRTLCompatib
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
open override var isSelected: Bool {
|
||||
didSet {
|
||||
setSelectedStyle(isSelected: isSelected)
|
||||
}
|
||||
}
|
||||
|
||||
open override var isHighlighted: Bool {
|
||||
didSet {
|
||||
setSelectedStyle(isSelected: isHighlighted)
|
||||
}
|
||||
}
|
||||
|
||||
func setSelectedStyle(isSelected: Bool) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,6 +28,8 @@ open class JXSegmentedBaseDataSource: JXSegmentedViewDataSource {
|
||||
open var selectedAnimationDuration: TimeInterval = 0.25
|
||||
/// 是否允许item宽度缩放
|
||||
open var isItemWidthZoomEnabled: Bool = false
|
||||
/// 是否允许item宽度缩放动画
|
||||
open var isItemWidthZoomAnimable: Bool = true
|
||||
/// item宽度选中时的scale
|
||||
open var itemWidthSelectedZoomScale: CGFloat = 1.5
|
||||
|
||||
@ -131,7 +133,11 @@ open class JXSegmentedBaseDataSource: JXSegmentedViewDataSource {
|
||||
willSelectedItemModel.itemWidth = self.itemWidthWithZoom(at: willSelectedItemModel.index, model: willSelectedItemModel)
|
||||
segmentedView.collectionView.collectionViewLayout.invalidateLayout()
|
||||
}
|
||||
animator?.start()
|
||||
if isItemWidthZoomAnimable {
|
||||
animator?.start()
|
||||
}else {
|
||||
animator?.stop()
|
||||
}
|
||||
}
|
||||
}else {
|
||||
currentSelectedItemModel.itemWidthCurrentZoomScale = currentSelectedItemModel.itemWidthNormalZoomScale
|
||||
|
||||
@ -10,7 +10,7 @@ import UIKit
|
||||
|
||||
open class JXSegmentedCollectionView: UICollectionView {
|
||||
|
||||
open var indicators = [JXSegmentedIndicatorProtocol & UIView]() {
|
||||
open var indicators = [JXSegmentedIndicatorProtocol]() {
|
||||
willSet {
|
||||
for indicator in indicators {
|
||||
indicator.removeFromSuperview()
|
||||
|
||||
@ -171,7 +171,7 @@ open class JXSegmentedView: UIView, JXSegmentedViewRTLCompatible {
|
||||
}
|
||||
}
|
||||
/// indicators的元素必须是遵从JXSegmentedIndicatorProtocol协议的UIView及其子类
|
||||
open var indicators = [JXSegmentedIndicatorProtocol & UIView]() {
|
||||
open var indicators = [JXSegmentedIndicatorProtocol]() {
|
||||
didSet {
|
||||
collectionView.indicators = indicators
|
||||
}
|
||||
@ -224,6 +224,7 @@ open class JXSegmentedView: UIView, JXSegmentedViewRTLCompatible {
|
||||
collectionView.showsVerticalScrollIndicator = false
|
||||
collectionView.showsHorizontalScrollIndicator = false
|
||||
collectionView.scrollsToTop = false
|
||||
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "JXSegmentedViewInnerEmptyCell")
|
||||
collectionView.dataSource = self
|
||||
collectionView.delegate = self
|
||||
if #available(iOS 10.0, *) {
|
||||
@ -686,7 +687,7 @@ extension JXSegmentedView: UICollectionViewDataSource {
|
||||
cell.reloadData(itemModel: itemDataSource[indexPath.item], selectedType: .unknown)
|
||||
return cell
|
||||
}else {
|
||||
return UICollectionViewCell(frame: CGRect.zero)
|
||||
return collectionView.dequeueReusableCell(withReuseIdentifier: "JXSegmentedViewInnerEmptyCell", for: indexPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -713,7 +714,11 @@ extension JXSegmentedView: UICollectionViewDelegateFlowLayout {
|
||||
}
|
||||
|
||||
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
||||
return CGSize(width: itemDataSource[indexPath.item].itemWidth, height: collectionView.bounds.size.height)
|
||||
if indexPath.item >= 0, indexPath.item < itemDataSource.count {
|
||||
return CGSize(width: itemDataSource[indexPath.item].itemWidth, height: collectionView.bounds.size.height)
|
||||
} else {
|
||||
return .zero
|
||||
}
|
||||
}
|
||||
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
|
||||
return innerItemSpacing
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
public protocol JXSegmentedIndicatorProtocol {
|
||||
public protocol JXSegmentedIndicatorProtocol: UIView {
|
||||
/// 是否需要将当前的indicator的frame转换到cell。辅助JXSegmentedTitleDataSourced的isTitleMaskEnabled属性使用。
|
||||
/// 如果添加了多个indicator,仅能有一个indicator的isIndicatorConvertToItemFrameEnabled为true。
|
||||
/// 如果有多个indicator的isIndicatorConvertToItemFrameEnabled为true,则以最后一个isIndicatorConvertToItemFrameEnabled为true的indicator为准。
|
||||
|
||||
@ -196,4 +196,12 @@ open class JXSegmentedTitleCell: JXSegmentedBaseCell {
|
||||
self?.titleLabel.textColor = itemModel.titleCurrentColor
|
||||
}
|
||||
}
|
||||
|
||||
override func setSelectedStyle(isSelected: Bool) {
|
||||
if isSelected {
|
||||
self.titleLabel.textColor = (self.itemModel as? JXSegmentedTitleItemModel)?.titleSelectedColor
|
||||
} else {
|
||||
self.titleLabel.textColor = (self.itemModel as? JXSegmentedTitleItemModel)?.titleNormalColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,9 +8,11 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource{
|
||||
open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource {
|
||||
/// title数组
|
||||
open var titles = [String]()
|
||||
/// 根据index配置cell的不同属性
|
||||
open var configuration: JXSegmentedTitleDynamicConfiguration?
|
||||
/// 如果将JXSegmentedView嵌套进UITableView的cell,每次重用的时候,JXSegmentedView进行reloadData时,会重新计算所有的title宽度。所以该应用场景,需要UITableView的cellModel缓存titles的文字宽度,再通过该闭包方法返回给JXSegmentedView。
|
||||
open var widthForTitleClosure: ((String)->(CGFloat))?
|
||||
/// label的numberOfLines
|
||||
@ -36,7 +38,6 @@ open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource{
|
||||
/// title是否使用遮罩过渡
|
||||
open var isTitleMaskEnabled: Bool = false
|
||||
|
||||
|
||||
open override func preferredItemCount() -> Int {
|
||||
return titles.count
|
||||
}
|
||||
@ -53,13 +54,17 @@ open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource{
|
||||
}
|
||||
|
||||
myItemModel.title = titles[index]
|
||||
myItemModel.textWidth = widthForTitle(myItemModel.title ?? "")
|
||||
myItemModel.titleNumberOfLines = titleNumberOfLines
|
||||
myItemModel.textWidth = widthForTitle(myItemModel.title ?? "", index)
|
||||
myItemModel.titleNumberOfLines = innerTitleNumberOfLines(at: index)
|
||||
myItemModel.isSelectedAnimable = isSelectedAnimable
|
||||
myItemModel.titleNormalColor = titleNormalColor
|
||||
myItemModel.titleSelectedColor = titleSelectedColor
|
||||
myItemModel.titleNormalFont = titleNormalFont
|
||||
myItemModel.titleSelectedFont = titleSelectedFont != nil ? titleSelectedFont! : titleNormalFont
|
||||
myItemModel.titleNormalColor = innerTitleNormalColor(at: index)
|
||||
myItemModel.titleSelectedColor = innerTitleSelectedColor(at: index)
|
||||
myItemModel.titleNormalFont = innerTitleNormalFont(at: index)
|
||||
if let selectedFont = innerTitleSelectedFont(at: index) {
|
||||
myItemModel.titleSelectedFont = selectedFont
|
||||
} else {
|
||||
myItemModel.titleSelectedFont = innerTitleNormalFont(at: index)
|
||||
}
|
||||
myItemModel.isTitleZoomEnabled = isTitleZoomEnabled
|
||||
myItemModel.isTitleStrokeWidthEnabled = isTitleStrokeWidthEnabled
|
||||
myItemModel.isTitleMaskEnabled = isTitleMaskEnabled
|
||||
@ -68,21 +73,21 @@ open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource{
|
||||
myItemModel.titleSelectedStrokeWidth = titleSelectedStrokeWidth
|
||||
myItemModel.titleNormalStrokeWidth = 0
|
||||
if index == selectedIndex {
|
||||
myItemModel.titleCurrentColor = titleSelectedColor
|
||||
myItemModel.titleCurrentColor = innerTitleSelectedColor(at: index)
|
||||
myItemModel.titleCurrentZoomScale = titleSelectedZoomScale
|
||||
myItemModel.titleCurrentStrokeWidth = titleSelectedStrokeWidth
|
||||
}else {
|
||||
myItemModel.titleCurrentColor = titleNormalColor
|
||||
myItemModel.titleCurrentColor = innerTitleNormalColor(at: index)
|
||||
myItemModel.titleCurrentZoomScale = 1
|
||||
myItemModel.titleCurrentStrokeWidth = 0
|
||||
}
|
||||
}
|
||||
|
||||
open func widthForTitle(_ title: String) -> CGFloat {
|
||||
open func widthForTitle(_ title: String, _ index: Int) -> CGFloat {
|
||||
if widthForTitleClosure != nil {
|
||||
return widthForTitleClosure!(title)
|
||||
}else {
|
||||
let textWidth = NSString(string: title).boundingRect(with: CGSize(width: CGFloat.infinity, height: CGFloat.infinity), options: [.usesFontLeading, .usesLineFragmentOrigin], attributes: [NSAttributedString.Key.font : titleNormalFont], context: nil).size.width
|
||||
let textWidth = NSString(string: title).boundingRect(with: CGSize(width: CGFloat.infinity, height: CGFloat.infinity), options: [.usesFontLeading, .usesLineFragmentOrigin], attributes: [NSAttributedString.Key.font : innerTitleNormalFont(at: index)], context: nil).size.width
|
||||
return CGFloat(ceilf(Float(textWidth)))
|
||||
}
|
||||
}
|
||||
@ -156,4 +161,42 @@ open class JXSegmentedTitleDataSource: JXSegmentedBaseDataSource{
|
||||
myWillSelectedItemModel.titleCurrentZoomScale = myWillSelectedItemModel.titleSelectedZoomScale
|
||||
myWillSelectedItemModel.titleCurrentStrokeWidth = myWillSelectedItemModel.titleSelectedStrokeWidth
|
||||
}
|
||||
|
||||
// MARK: - Configuration
|
||||
|
||||
private func innerTitleNumberOfLines(at index: Int) -> Int {
|
||||
if let configuration {
|
||||
return configuration.titleNumberOfLines(at: index)
|
||||
} else {
|
||||
return titleNumberOfLines
|
||||
}
|
||||
}
|
||||
private func innerTitleNormalColor(at index: Int) -> UIColor {
|
||||
if let configuration {
|
||||
return configuration.titleNormalColor(at: index)
|
||||
} else {
|
||||
return titleNormalColor
|
||||
}
|
||||
}
|
||||
private func innerTitleSelectedColor(at index: Int) -> UIColor {
|
||||
if let configuration {
|
||||
return configuration.titleSelectedColor(at: index)
|
||||
} else {
|
||||
return titleSelectedColor
|
||||
}
|
||||
}
|
||||
private func innerTitleNormalFont(at index: Int) -> UIFont {
|
||||
if let configuration {
|
||||
return configuration.titleNormalFont(at: index)
|
||||
} else {
|
||||
return titleNormalFont
|
||||
}
|
||||
}
|
||||
private func innerTitleSelectedFont(at index: Int) -> UIFont? {
|
||||
if let configuration {
|
||||
return configuration.titleSelectedFont(at: index)
|
||||
} else {
|
||||
return titleSelectedFont
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
}
|
||||
|
||||
// 设置位置
|
||||
self.mj_y = _scrollView.mj_contentH;
|
||||
self.mj_y = _scrollView.mj_contentH + self.ignoredScrollViewContentInsetBottom;
|
||||
} else { // 被移除了
|
||||
if (self.hidden == NO) {
|
||||
self.scrollView.mj_insetB -= self.mj_h;
|
||||
@ -205,7 +205,7 @@
|
||||
self.scrollView.mj_insetB += self.mj_h;
|
||||
|
||||
// 设置位置
|
||||
self.mj_y = _scrollView.mj_contentH;
|
||||
self.mj_y = _scrollView.mj_contentH + self.ignoredScrollViewContentInsetBottom;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
216
wallpaper_project/Pods/Manifest.lock
generated
216
wallpaper_project/Pods/Manifest.lock
generated
@ -1,5 +1,21 @@
|
||||
PODS:
|
||||
- Alamofire (5.9.0)
|
||||
- Ads-Global/BUAdSDK_Compatible (5.9.0.6):
|
||||
- Ads-Global/BURelyAdSDK
|
||||
- Ads-Global/Dep_Compatible
|
||||
- Ads-Global/BURelyAdSDK (5.9.0.6)
|
||||
- Ads-Global/Dep_Compatible (5.9.0.6):
|
||||
- BURelyFoundation_Global/Pangle (~> 0.2.1.4)
|
||||
- Alamofire (5.9.1)
|
||||
- AppLovinDSPLinkedInAdapter (1.2.2.0):
|
||||
- AppLovinSDK
|
||||
- LinkedinAudienceNetwork (= 1.2.2)
|
||||
- AppLovinMediationByteDanceAdapter (5.9.0.6.0):
|
||||
- Ads-Global/BUAdSDK_Compatible (= 5.9.0.6)
|
||||
- AppLovinSDK
|
||||
- AppLovinMediationVungleAdapter (7.3.1.0):
|
||||
- AppLovinSDK
|
||||
- VungleAds (= 7.3.1)
|
||||
- AppLovinSDK (12.4.1)
|
||||
- BRPickerView (2.8.1):
|
||||
- BRPickerView/AddressPickerView (= 2.8.1)
|
||||
- BRPickerView/Base (= 2.8.1)
|
||||
@ -12,29 +28,165 @@ PODS:
|
||||
- BRPickerView/Base
|
||||
- BRPickerView/StringPickerView (2.8.1):
|
||||
- BRPickerView/Base
|
||||
- BURelyFoundation_Global/AFNetworking (0.2.1.4)
|
||||
- BURelyFoundation_Global/APM (0.2.1.4)
|
||||
- BURelyFoundation_Global/Foundation (0.2.1.4):
|
||||
- BURelyFoundation_Global/NETWork
|
||||
- BURelyFoundation_Global/Gecko (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Header (0.2.1.4)
|
||||
- BURelyFoundation_Global/NETWork (0.2.1.4):
|
||||
- BURelyFoundation_Global/AFNetworking
|
||||
- BURelyFoundation_Global/Pangle (0.2.1.4):
|
||||
- BURelyFoundation_Global/AFNetworking
|
||||
- BURelyFoundation_Global/APM
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Gecko
|
||||
- BURelyFoundation_Global/Header
|
||||
- BURelyFoundation_Global/NETWork
|
||||
- BURelyFoundation_Global/SDWebImage
|
||||
- BURelyFoundation_Global/YYModel
|
||||
- BURelyFoundation_Global/ZFPlayer
|
||||
- BURelyFoundation_Global/Zip
|
||||
- BURelyFoundation_Global/SDWebImage (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/YYModel (0.2.1.4)
|
||||
- BURelyFoundation_Global/ZFPlayer (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- BURelyFoundation_Global/Zip
|
||||
- BURelyFoundation_Global/Zip (0.2.1.4):
|
||||
- BURelyFoundation_Global/Foundation
|
||||
- CYLTabBarController (1.29.2):
|
||||
- CYLTabBarController/Core (= 1.29.2)
|
||||
- CYLTabBarController/Core (1.29.2)
|
||||
- Firebase/AnalyticsWithoutAdIdSupport (10.24.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics/WithoutAdIdSupport (~> 10.24.0)
|
||||
- Firebase/Core (10.24.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics (~> 10.24.0)
|
||||
- Firebase/CoreOnly (10.24.0):
|
||||
- FirebaseCore (= 10.24.0)
|
||||
- FirebaseAnalytics (10.24.0):
|
||||
- FirebaseAnalytics/AdIdSupport (= 10.24.0)
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseAnalytics/AdIdSupport (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleAppMeasurement (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseAnalytics/WithoutAdIdSupport (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- FirebaseInstallations (~> 10.0)
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- FirebaseCore (10.24.0):
|
||||
- FirebaseCoreInternal (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.12)
|
||||
- GoogleUtilities/Logger (~> 7.12)
|
||||
- FirebaseCoreInternal (10.24.0):
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.8)"
|
||||
- FirebaseInstallations (10.24.0):
|
||||
- FirebaseCore (~> 10.0)
|
||||
- GoogleUtilities/Environment (~> 7.8)
|
||||
- GoogleUtilities/UserDefaults (~> 7.8)
|
||||
- PromisesObjC (~> 2.1)
|
||||
- FLAnimatedImage (1.0.17)
|
||||
- FSPagerView (0.8.3)
|
||||
- GoogleAppMeasurement (10.24.0):
|
||||
- GoogleAppMeasurement/AdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleAppMeasurement/AdIdSupport (10.24.0):
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (= 10.24.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleAppMeasurement/WithoutAdIdSupport (10.24.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.11)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.11)
|
||||
- GoogleUtilities/Network (~> 7.11)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.11)"
|
||||
- nanopb (< 2.30911.0, >= 2.30908.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (7.13.0):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Environment (7.13.0):
|
||||
- GoogleUtilities/Privacy
|
||||
- PromisesObjC (< 3.0, >= 1.2)
|
||||
- GoogleUtilities/Logger (7.13.0):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/MethodSwizzler (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Network (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- "GoogleUtilities/NSData+zlib"
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Reachability
|
||||
- "GoogleUtilities/NSData+zlib (7.13.0)":
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/Privacy (7.13.0)
|
||||
- GoogleUtilities/Reachability (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GoogleUtilities/UserDefaults (7.13.0):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Privacy
|
||||
- GYSide (0.0.5)
|
||||
- IQKeyboardManagerSwift (7.0.1)
|
||||
- JXSegmentedView (1.3.0)
|
||||
- IQKeyboardManagerSwift (6.5.16)
|
||||
- JXSegmentedView (1.3.3)
|
||||
- LinkedinAudienceNetwork (1.2.2)
|
||||
- lottie-ios (4.4.1)
|
||||
- MJExtension (3.4.1)
|
||||
- MJRefresh (3.7.6)
|
||||
- SDWebImage (5.19.0):
|
||||
- SDWebImage/Core (= 5.19.0)
|
||||
- SDWebImage/Core (5.19.0)
|
||||
- MJExtension (3.4.2)
|
||||
- MJRefresh (3.7.9)
|
||||
- nanopb (2.30910.0):
|
||||
- nanopb/decode (= 2.30910.0)
|
||||
- nanopb/encode (= 2.30910.0)
|
||||
- nanopb/decode (2.30910.0)
|
||||
- nanopb/encode (2.30910.0)
|
||||
- PromisesObjC (2.4.0)
|
||||
- SDWebImage (5.19.1):
|
||||
- SDWebImage/Core (= 5.19.1)
|
||||
- SDWebImage/Core (5.19.1)
|
||||
- SnapKit (5.7.1)
|
||||
- SVProgressHUD (2.3.1):
|
||||
- SVProgressHUD/Core (= 2.3.1)
|
||||
- SVProgressHUD/Core (2.3.1)
|
||||
- VungleAds (7.3.1)
|
||||
|
||||
DEPENDENCIES:
|
||||
- Alamofire
|
||||
- AppLovinDSPLinkedInAdapter
|
||||
- AppLovinMediationByteDanceAdapter
|
||||
- AppLovinMediationVungleAdapter
|
||||
- AppLovinSDK
|
||||
- BRPickerView
|
||||
- CYLTabBarController
|
||||
- Firebase/AnalyticsWithoutAdIdSupport
|
||||
- Firebase/Core
|
||||
- FLAnimatedImage
|
||||
- FSPagerView
|
||||
- GYSide
|
||||
@ -49,37 +201,71 @@ DEPENDENCIES:
|
||||
|
||||
SPEC REPOS:
|
||||
trunk:
|
||||
- Ads-Global
|
||||
- Alamofire
|
||||
- AppLovinDSPLinkedInAdapter
|
||||
- AppLovinMediationByteDanceAdapter
|
||||
- AppLovinMediationVungleAdapter
|
||||
- AppLovinSDK
|
||||
- BRPickerView
|
||||
- BURelyFoundation_Global
|
||||
- CYLTabBarController
|
||||
- Firebase
|
||||
- FirebaseAnalytics
|
||||
- FirebaseCore
|
||||
- FirebaseCoreInternal
|
||||
- FirebaseInstallations
|
||||
- FLAnimatedImage
|
||||
- FSPagerView
|
||||
- GoogleAppMeasurement
|
||||
- GoogleUtilities
|
||||
- GYSide
|
||||
- IQKeyboardManagerSwift
|
||||
- JXSegmentedView
|
||||
- LinkedinAudienceNetwork
|
||||
- lottie-ios
|
||||
- MJExtension
|
||||
- MJRefresh
|
||||
- nanopb
|
||||
- PromisesObjC
|
||||
- SDWebImage
|
||||
- SnapKit
|
||||
- SVProgressHUD
|
||||
- VungleAds
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
Alamofire: 02b772c9910e8eba1a079227c32fbd9e46c90a24
|
||||
Ads-Global: 3ed9f8c6f11d4d6a4496e1dd74a4537f10b41b65
|
||||
Alamofire: f36a35757af4587d8e4f4bfa223ad10be2422b8c
|
||||
AppLovinDSPLinkedInAdapter: 093f25d472b4073f8203fa72a68347cbd589e232
|
||||
AppLovinMediationByteDanceAdapter: d902ba6e2a6c0061bf2675ec74428b37620b59ca
|
||||
AppLovinMediationVungleAdapter: b42444550ca03233753cfeb36a5660f94d038fb5
|
||||
AppLovinSDK: c57ad0d34625c971d2db127f8ef60570b28ff51a
|
||||
BRPickerView: 2531a2d4d0fea0b57a1c738de215af0f88863a2f
|
||||
BURelyFoundation_Global: 17ed9cd58d138feefd8c0711dd3294766adcb28e
|
||||
CYLTabBarController: db44b5901a28693a8a4279e4721b3aafdd36c178
|
||||
Firebase: 91fefd38712feb9186ea8996af6cbdef41473442
|
||||
FirebaseAnalytics: b5efc493eb0f40ec560b04a472e3e1a15d39ca13
|
||||
FirebaseCore: 11dc8a16dfb7c5e3c3f45ba0e191a33ac4f50894
|
||||
FirebaseCoreInternal: bcb5acffd4ea05e12a783ecf835f2210ce3dc6af
|
||||
FirebaseInstallations: 8f581fca6478a50705d2bd2abd66d306e0f5736e
|
||||
FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b
|
||||
FSPagerView: 670405b2f18e2a87fa37f20b00de783e562c25a8
|
||||
GoogleAppMeasurement: f3abf08495ef2cba7829f15318c373b8d9226491
|
||||
GoogleUtilities: d053d902a8edaa9904e1bd00c37535385b8ed152
|
||||
GYSide: 672895491bf7a809f0631dd8a122ab5d1d601aae
|
||||
IQKeyboardManagerSwift: 7f6b1b1d1497855d2beea7f2f10ffcc6978525b1
|
||||
JXSegmentedView: fec0d335355b6e019c494fe2e030bde8a36d2df6
|
||||
IQKeyboardManagerSwift: 12d89768845bb77b55cc092ecc2b1f9370f06b76
|
||||
JXSegmentedView: 651b60fcf705258ba9395edd53876dbd2853fb68
|
||||
LinkedinAudienceNetwork: de299f32547bd528916b3c9f113015f74347398c
|
||||
lottie-ios: e047b1d2e6239b787cc5e9755b988869cf190494
|
||||
MJExtension: 21c5f6f8c4d5d8844b7ae8fbae08fed0b501f961
|
||||
MJRefresh: 2fe7fb43a5167ceda20bb7e63f130c04fd1814a5
|
||||
SDWebImage: 981fd7e860af070920f249fd092420006014c3eb
|
||||
MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8
|
||||
MJRefresh: ff9e531227924c84ce459338414550a05d2aea78
|
||||
nanopb: 438bc412db1928dac798aa6fd75726007be04262
|
||||
PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47
|
||||
SDWebImage: 40b0b4053e36c660a764958bff99eed16610acbb
|
||||
SnapKit: d612e99e678a2d3b95bf60b0705ed0a35c03484a
|
||||
SVProgressHUD: 4837c74bdfe2e51e8821c397825996a8d7de6e22
|
||||
VungleAds: 04a17ab51fb61f41cd6d666fd0024509005740fe
|
||||
|
||||
PODFILE CHECKSUM: 8919f964b95c5ac6e11bc2a3a3200b4dd02b3b9c
|
||||
PODFILE CHECKSUM: e5237cccfc6fa11c317ad1e1cbd81ea18c1f4a05
|
||||
|
||||
COCOAPODS: 1.15.2
|
||||
|
||||
13606
wallpaper_project/Pods/Pods.xcodeproj/project.pbxproj
generated
13606
wallpaper_project/Pods/Pods.xcodeproj/project.pbxproj
generated
File diff suppressed because it is too large
Load Diff
@ -4,145 +4,235 @@
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>Ads-Global.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Alamofire-Alamofire.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>Alamofire.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>AppLovinDSPLinkedInAdapter.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>AppLovinMediationByteDanceAdapter.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>AppLovinMediationVungleAdapter.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>AppLovinSDK.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>BRPickerView.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>BURelyFoundation_Global.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>CYLTabBarController.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
<key>FLAnimatedImage.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>4</integer>
|
||||
</dict>
|
||||
<key>FSPagerView.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
<key>Firebase.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseAnalytics.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseCore-FirebaseCore_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseCore.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseCoreInternal-FirebaseCoreInternal_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseCoreInternal.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseInstallations-FirebaseInstallations_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>FirebaseInstallations.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>GYSide.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>IQKeyboardManagerSwift-IQKeyboardManagerSwift.xcscheme</key>
|
||||
<key>GoogleAppMeasurement.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>GoogleUtilities-GoogleUtilities_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>GoogleUtilities.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>8</integer>
|
||||
</dict>
|
||||
<key>IQKeyboardManagerSwift.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>7</integer>
|
||||
</dict>
|
||||
<key>JXSegmentedView-JXSegmentedView.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>JXSegmentedView.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>9</integer>
|
||||
</dict>
|
||||
<key>LinkedinAudienceNetwork.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>MJExtension-MJExtension.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>MJExtension.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>12</integer>
|
||||
</dict>
|
||||
<key>MJRefresh-MJRefresh.Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>MJRefresh.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>13</integer>
|
||||
</dict>
|
||||
<key>Pods-wallpaper_project.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>14</integer>
|
||||
</dict>
|
||||
<key>PromisesObjC-FBLPromises_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>PromisesObjC.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>SDWebImage-SDWebImage.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>16</integer>
|
||||
</dict>
|
||||
<key>SDWebImage.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>15</integer>
|
||||
</dict>
|
||||
<key>SVProgressHUD.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>19</integer>
|
||||
</dict>
|
||||
<key>SnapKit-SnapKit_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>18</integer>
|
||||
</dict>
|
||||
<key>SnapKit.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>17</integer>
|
||||
</dict>
|
||||
<key>VungleAds-VungleAds.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>VungleAds.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>lottie-ios-LottiePrivacyInfo.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>11</integer>
|
||||
</dict>
|
||||
<key>lottie-ios.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
<key>orderHint</key>
|
||||
<integer>10</integer>
|
||||
</dict>
|
||||
<key>nanopb-nanopb_Privacy.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>nanopb.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
|
||||
14
wallpaper_project/Pods/SDWebImage/README.md
generated
14
wallpaper_project/Pods/SDWebImage/README.md
generated
@ -39,19 +39,20 @@ Note: `SD` is the prefix for **Simple Design** (which is the team name in Daily
|
||||
|
||||
## For Apple visionOS
|
||||
|
||||
From 5.18.0, SDWebImage can be compiled for visionOS platform. However, it's still in beta and may contains issues unlike the stable iOS UIKit support. Welcome to have a try and [report issue](https://github.com/SDWebImage/SDWebImage/issues).
|
||||
From 5.19+, SDWebImage supports visionOS on all Package Managers (include CocoaPods/Carthage/SPM). Upgrade the related tools if you're facing issues.
|
||||
|
||||
For 5.18+, SDWebImage can be compiled for visionOS platform. However, it's still in beta and may contains issues unlike the stable iOS UIKit support. Welcome to have a try and [report issue](https://github.com/SDWebImage/SDWebImage/issues).
|
||||
|
||||
To build on visionOS, currently we only support the standard Xcode integration.
|
||||
|
||||
See `Installation with Swift Package Manager` and `Manual Installation Guide` below.
|
||||
|
||||
Once the visionOS toolchain is stable, we will add the other package manager support later (include CocoaPods).
|
||||
|
||||
## Supported Image Formats
|
||||
|
||||
- Image formats supported by Apple system (JPEG, PNG, TIFF, BMP, ...), including [GIF](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#gif-coder)/[APNG](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#apng-coder) animated image
|
||||
- HEIC format from iOS 11/macOS 10.13, including animated HEIC from iOS 13/macOS 10.15 via [SDWebImageHEICCoder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#heic-coder). For lower firmware, use coder plugin [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder)
|
||||
- WebP format from iOS 14/macOS 11.0 via [SDWebImageAWebPCoder](https://github.com/SDWebImage/SDWebImage/wiki/Advanced-Usage#awebp-coder). For lower firmware, use coder plugin [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder)
|
||||
- JPEG-XL format from iOS 17/macOS 14.0 built-in. For lower firmware, use coder plugin [SDWebImageJPEGXLCoder](https://github.com/SDWebImage/SDWebImageJPEGXLCoder)
|
||||
- Support extendable coder plugins for new image formats like BPG, AVIF. And vector format like PDF, SVG. See all the list in [Image coder plugin List](https://github.com/SDWebImage/SDWebImage/wiki/Coder-Plugin-List)
|
||||
|
||||
## Additional modules and Ecosystem
|
||||
@ -67,8 +68,8 @@ We support SwiftUI by building a brand new framework called [SDWebImageSwiftUI](
|
||||
The new framework introduce two View structs `WebImage` and `AnimatedImage` for SwiftUI world, `ImageIndicator` modifier for any View, `ImageManager` observable object for data source. Supports iOS 13+/macOS 10.15+/tvOS 13+/watchOS 6+ and Swift 5.1. Have a nice try and provide feedback!
|
||||
|
||||
#### Coders for additional image formats
|
||||
- [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) - coder for WebP format. iOS 8+/macOS 10.10+. Based on [libwebp](https://chromium.googlesource.com/webm/libwebp)
|
||||
- [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder) - coder for HEIF format, iOS 8+/macOS 10.10+ support. Based on [libheif](https://github.com/strukturag/libheif)
|
||||
- [SDWebImageWebPCoder](https://github.com/SDWebImage/SDWebImageWebPCoder) - coder for WebP format. iOS 9+/macOS 10.11+. Based on [libwebp](https://chromium.googlesource.com/webm/libwebp)
|
||||
- [SDWebImageHEIFCoder](https://github.com/SDWebImage/SDWebImageHEIFCoder) - coder for HEIF format, iOS 9+/macOS 10.11+ support. Based on [libheif](https://github.com/strukturag/libheif)
|
||||
- [SDWebImageBPGCoder](https://github.com/SDWebImage/SDWebImageBPGCoder) - coder for BPG format. Based on [libbpg](https://github.com/mirrorer/libbpg)
|
||||
- [SDWebImageFLIFCoder](https://github.com/SDWebImage/SDWebImageFLIFCoder) - coder for FLIF format. Based on [libflif](https://github.com/FLIF-hub/FLIF)
|
||||
- [SDWebImageAVIFCoder](https://github.com/SDWebImage/SDWebImageAVIFCoder) - coder for AVIF (AV1-based) format. Based on [libavif](https://github.com/AOMediaCodec/libavif)
|
||||
@ -76,6 +77,7 @@ The new framework introduce two View structs `WebImage` and `AnimatedImage` for
|
||||
- [SDWebImageSVGCoder](https://github.com/SDWebImage/SDWebImageSVGCoder) - coder for SVG vector format. Using built-in frameworks
|
||||
- [SDWebImageSVGNativeCoder](https://github.com/SDWebImage/SDWebImageSVGNativeCoder) - coder for SVG-Native vector format. Based on [svg-native](https://github.com/adobe/svg-native-viewer)
|
||||
- [SDWebImageLottieCoder](https://github.com/SDWebImage/SDWebImageLottieCoder) - coder for Lottie animation format. Based on [rlottie](https://github.com/Samsung/rlottie)
|
||||
- [SDWebImageJPEGXLCoder](https://github.com/SDWebImage/SDWebImageJPEGXLCoder) - coder for JPEG-XL format. iOS 9+/macOS 10.11+. Based on [libjxl](https://github.com/libjxl/libjxl)
|
||||
- and more from community!
|
||||
|
||||
#### Custom Caches
|
||||
@ -88,7 +90,7 @@ The new framework introduce two View structs `WebImage` and `AnimatedImage` for
|
||||
|
||||
#### Integration with 3rd party libraries
|
||||
- [SDWebImageLottiePlugin](https://github.com/SDWebImage/SDWebImageLottiePlugin) - plugin to support [Lottie-iOS](https://github.com/airbnb/lottie-ios), vector animation rending with remote JSON files
|
||||
- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageSVGKitPlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 8+/macOS 10.10+ support
|
||||
- [SDWebImageSVGKitPlugin](https://github.com/SDWebImage/SDWebImageSVGKitPlugin) - plugin to support [SVGKit](https://github.com/SVGKit/SVGKit), SVG rendering using Core Animation, iOS 9+/macOS 10.11+ support
|
||||
- [SDWebImageFLPlugin](https://github.com/SDWebImage/SDWebImageFLPlugin) - plugin to support [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage) as the engine for animated GIFs
|
||||
- [SDWebImageYYPlugin](https://github.com/SDWebImage/SDWebImageYYPlugin) - plugin to integrate [YYImage](https://github.com/ibireme/YYImage) & [YYCache](https://github.com/ibireme/YYCache) for image rendering & caching
|
||||
|
||||
|
||||
@ -94,6 +94,9 @@ static void SDSafeExecute(SDCallbackQueue *callbackQueue, dispatch_block_t _Nonn
|
||||
case SDCallbackPolicyInvoke:
|
||||
block();
|
||||
break;
|
||||
default:
|
||||
SDSafeExecute(self, block, NO);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,6 +111,9 @@ static void SDSafeExecute(SDCallbackQueue *callbackQueue, dispatch_block_t _Nonn
|
||||
case SDCallbackPolicyInvoke:
|
||||
block();
|
||||
break;
|
||||
default:
|
||||
SDSafeExecute(self, block, YES);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -129,6 +129,7 @@
|
||||
@property (nonatomic, strong, readonly, nonnull) SDImageCacheConfig *config;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
/**
|
||||
Move the cache directory from old location to new location, the old location will be removed after finish.
|
||||
|
||||
@ -165,7 +165,7 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||
NSArray<NSString *> *resourceKeys = @[NSURLIsDirectoryKey, cacheContentDateKey, NSURLTotalFileAllocatedSizeKey];
|
||||
|
||||
// This enumerator prefetches useful properties for our cache files.
|
||||
NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL
|
||||
NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL
|
||||
includingPropertiesForKeys:resourceKeys
|
||||
options:NSDirectoryEnumerationSkipsHiddenFiles
|
||||
errorHandler:NULL];
|
||||
@ -180,25 +180,27 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||
// 2. Storing file attributes for the size-based cleanup pass.
|
||||
NSMutableArray<NSURL *> *urlsToDelete = [[NSMutableArray alloc] init];
|
||||
for (NSURL *fileURL in fileEnumerator) {
|
||||
NSError *error;
|
||||
NSDictionary<NSString *, id> *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:&error];
|
||||
|
||||
// Skip directories and errors.
|
||||
if (error || !resourceValues || [resourceValues[NSURLIsDirectoryKey] boolValue]) {
|
||||
continue;
|
||||
@autoreleasepool {
|
||||
NSError *error;
|
||||
NSDictionary<NSString *, id> *resourceValues = [fileURL resourceValuesForKeys:resourceKeys error:&error];
|
||||
|
||||
// Skip directories and errors.
|
||||
if (error || !resourceValues || [resourceValues[NSURLIsDirectoryKey] boolValue]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Remove files that are older than the expiration date;
|
||||
NSDate *modifiedDate = resourceValues[cacheContentDateKey];
|
||||
if (expirationDate && [[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
|
||||
[urlsToDelete addObject:fileURL];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Store a reference to this file and account for its total size.
|
||||
NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
|
||||
currentCacheSize += totalAllocatedSize.unsignedIntegerValue;
|
||||
cacheFiles[fileURL] = resourceValues;
|
||||
}
|
||||
|
||||
// Remove files that are older than the expiration date;
|
||||
NSDate *modifiedDate = resourceValues[cacheContentDateKey];
|
||||
if (expirationDate && [[modifiedDate laterDate:expirationDate] isEqualToDate:expirationDate]) {
|
||||
[urlsToDelete addObject:fileURL];
|
||||
continue;
|
||||
}
|
||||
|
||||
// Store a reference to this file and account for its total size.
|
||||
NSNumber *totalAllocatedSize = resourceValues[NSURLTotalFileAllocatedSizeKey];
|
||||
currentCacheSize += totalAllocatedSize.unsignedIntegerValue;
|
||||
cacheFiles[fileURL] = resourceValues;
|
||||
}
|
||||
|
||||
for (NSURL *fileURL in urlsToDelete) {
|
||||
@ -240,19 +242,37 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||
|
||||
- (NSUInteger)totalSize {
|
||||
NSUInteger size = 0;
|
||||
NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtPath:self.diskCachePath];
|
||||
for (NSString *fileName in fileEnumerator) {
|
||||
NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
|
||||
NSDictionary<NSString *, id> *attrs = [self.fileManager attributesOfItemAtPath:filePath error:nil];
|
||||
size += [attrs fileSize];
|
||||
|
||||
// Use URL-based enumerator instead of Path(NSString *)-based enumerator to reduce
|
||||
// those objects(ex. NSPathStore2/_NSCFString/NSConcreteData) created during traversal.
|
||||
// Even worse, those objects are added into AutoreleasePool, in background threads,
|
||||
// the time to release those objects is undifined(according to the usage of CPU)
|
||||
// It will truely consumes a lot of VM, up to cause OOMs.
|
||||
@autoreleasepool {
|
||||
NSURL *pathURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
|
||||
NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:pathURL
|
||||
includingPropertiesForKeys:@[NSURLFileSizeKey]
|
||||
options:(NSDirectoryEnumerationOptions)0
|
||||
errorHandler:NULL];
|
||||
|
||||
for (NSURL *fileURL in fileEnumerator) {
|
||||
@autoreleasepool {
|
||||
NSNumber *fileSize;
|
||||
[fileURL getResourceValue:&fileSize forKey:NSURLFileSizeKey error:NULL];
|
||||
size += fileSize.unsignedIntegerValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
- (NSUInteger)totalCount {
|
||||
NSUInteger count = 0;
|
||||
NSDirectoryEnumerator *fileEnumerator = [self.fileManager enumeratorAtPath:self.diskCachePath];
|
||||
count = fileEnumerator.allObjects.count;
|
||||
@autoreleasepool {
|
||||
NSURL *diskCacheURL = [NSURL fileURLWithPath:self.diskCachePath isDirectory:YES];
|
||||
NSDirectoryEnumerator<NSURL *> *fileEnumerator = [self.fileManager enumeratorAtURL:diskCacheURL includingPropertiesForKeys:@[] options:(NSDirectoryEnumerationOptions)0 errorHandler:nil];
|
||||
count = fileEnumerator.allObjects.count;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@ -295,13 +315,21 @@ static NSString * const SDDiskCacheExtendedAttributeName = @"com.hackemist.SDDis
|
||||
}
|
||||
} else {
|
||||
// New directory exist, merge the files
|
||||
NSDirectoryEnumerator *dirEnumerator = [self.fileManager enumeratorAtPath:srcPath];
|
||||
NSString *file;
|
||||
while ((file = [dirEnumerator nextObject])) {
|
||||
[self.fileManager moveItemAtPath:[srcPath stringByAppendingPathComponent:file] toPath:[dstPath stringByAppendingPathComponent:file] error:nil];
|
||||
NSURL *srcURL = [NSURL fileURLWithPath:srcPath isDirectory:YES];
|
||||
NSDirectoryEnumerator<NSURL *> *srcDirEnumerator = [self.fileManager enumeratorAtURL:srcURL
|
||||
includingPropertiesForKeys:@[]
|
||||
options:(NSDirectoryEnumerationOptions)0
|
||||
errorHandler:NULL];
|
||||
for (NSURL *url in srcDirEnumerator) {
|
||||
@autoreleasepool {
|
||||
NSString *dstFilePath = [dstPath stringByAppendingPathComponent:url.lastPathComponent];
|
||||
NSURL *dstFileURL = [NSURL fileURLWithPath:dstFilePath isDirectory:NO];
|
||||
[self.fileManager moveItemAtURL:url toURL:dstFileURL error:nil];
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the old path
|
||||
[self.fileManager removeItemAtPath:srcPath error:nil];
|
||||
[self.fileManager removeItemAtURL:srcURL error:nil];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -129,7 +129,7 @@ typedef NS_ENUM(NSUInteger, SDImageCacheConfigExpireType) {
|
||||
|
||||
/**
|
||||
* The dispatch queue attr for ioQueue. You can config the QoS and concurrent/serial to internal IO queue. The ioQueue is used by SDImageCache to access read/write for disk data.
|
||||
* Defaults we use `DISPATCH_QUEUE_SERIAL`(NULL), to use serial dispatch queue to ensure single access for disk data. It's safe but may be slow.
|
||||
* Defaults we use `DISPATCH_QUEUE_SERIAL`(NULL) under iOS 10, `DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOL` above and equal iOS 10, using serial dispatch queue is to ensure single access for disk data. It's safe but may be slow.
|
||||
* @note You can override this to use `DISPATCH_QUEUE_CONCURRENT`, use concurrent queue.
|
||||
* @warning **MAKE SURE** to keep `diskCacheWritingOptions` to use `NSDataWritingAtomic`, or concurrent queue may cause corrupted disk data (because multiple threads read/write same file without atomic is not IO-safe).
|
||||
* @note This value does not support dynamic changes. Which means further modification on this value after cache initialized has no effect.
|
||||
|
||||
@ -36,7 +36,11 @@ static const NSInteger kDefaultCacheMaxDiskAge = 60 * 60 * 24 * 7; // 1 week
|
||||
_maxDiskSize = 0;
|
||||
_diskCacheExpireType = SDImageCacheConfigExpireTypeModificationDate;
|
||||
_fileManager = nil;
|
||||
_ioQueueAttributes = DISPATCH_QUEUE_SERIAL; // NULL
|
||||
if (@available(iOS 10.0, tvOS 10.0, macOS 10.12, watchOS 3.0, *)) {
|
||||
_ioQueueAttributes = DISPATCH_QUEUE_SERIAL_WITH_AUTORELEASE_POOL; // DISPATCH_AUTORELEASE_FREQUENCY_WORK_ITEM
|
||||
} else {
|
||||
_ioQueueAttributes = DISPATCH_QUEUE_SERIAL; // NULL
|
||||
}
|
||||
_memoryCacheClass = [SDMemoryCache class];
|
||||
_diskCacheClass = [SDDiskCache class];
|
||||
}
|
||||
|
||||
@ -36,6 +36,17 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
*/
|
||||
@protocol SDImageTransformer <NSObject>
|
||||
|
||||
@optional
|
||||
|
||||
/**
|
||||
Defaults to YES.
|
||||
We keep some metadata like Image Format (`sd_imageFormat`)/ Animated Loop Count (`sd_imageLoopCount`) via associated object on UIImage instance.
|
||||
When transformer generate a new UIImage instance, in most cases you still want to keep these information. So this is what for during the image loading pipeline.
|
||||
If the value is YES, we will keep and override the metadata **After you generate the UIImage**
|
||||
If the value is NO, we will not touch the UIImage metadata and it's controlled by you during the generation. Read `UIImage+Medata.h` and pick the metadata you want for the new generated UIImage.
|
||||
*/
|
||||
@property (nonatomic, assign, readonly) BOOL preserveImageMetadata;
|
||||
|
||||
@required
|
||||
/**
|
||||
For each transformer, it must contains its cache key to used to store the image cache or query from the cache. This key will be appened after the original cache key generated by URL or from user.
|
||||
@ -69,6 +80,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, copy, readonly, nonnull) NSArray<id<SDImageTransformer>> *transformers;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithTransformers:(nonnull NSArray<id<SDImageTransformer>> *)transformers;
|
||||
|
||||
@end
|
||||
@ -109,6 +122,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, strong, readonly, nullable) UIColor *borderColor;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor;
|
||||
|
||||
@end
|
||||
@ -129,6 +144,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, assign, readonly) SDImageScaleMode scaleMode;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode;
|
||||
|
||||
@end
|
||||
@ -144,6 +161,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, assign, readonly) CGRect rect;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithRect:(CGRect)rect;
|
||||
|
||||
@end
|
||||
@ -164,6 +183,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, assign, readonly) BOOL vertical;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical;
|
||||
|
||||
@end
|
||||
@ -185,6 +206,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, assign, readonly) BOOL fitSize;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize;
|
||||
|
||||
@end
|
||||
@ -202,6 +225,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, strong, readonly, nonnull) UIColor *tintColor;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithColor:(nonnull UIColor *)tintColor;
|
||||
|
||||
@end
|
||||
@ -219,6 +244,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, assign, readonly) CGFloat blurRadius;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithRadius:(CGFloat)blurRadius;
|
||||
|
||||
@end
|
||||
@ -235,6 +262,8 @@ FOUNDATION_EXPORT NSString * _Nullable SDThumbnailedKeyForKey(NSString * _Nullab
|
||||
@property (nonatomic, strong, readonly, nonnull) CIFilter *filter;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
+ (nonnull instancetype)transformerWithFilter:(nonnull CIFilter *)filter;
|
||||
|
||||
@end
|
||||
|
||||
@ -26,6 +26,9 @@ typedef NSString * _Nullable(^SDWebImageCacheKeyFilterBlock)(NSURL * _Nonnull ur
|
||||
*/
|
||||
@interface SDWebImageCacheKeyFilter : NSObject <SDWebImageCacheKeyFilter>
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
- (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block;
|
||||
+ (nonnull instancetype)cacheKeyFilterWithBlock:(nonnull SDWebImageCacheKeyFilterBlock)block;
|
||||
|
||||
|
||||
@ -33,4 +33,7 @@ typedef NSData * _Nullable(^SDWebImageCacheSerializerBlock)(UIImage * _Nonnull i
|
||||
- (nonnull instancetype)initWithBlock:(nonnull SDWebImageCacheSerializerBlock)block;
|
||||
+ (nonnull instancetype)cacheSerializerWithBlock:(nonnull SDWebImageCacheSerializerBlock)block;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
@ -38,6 +38,9 @@ A downloader response modifier class with block.
|
||||
/// @param block A block to control decrypt logic
|
||||
+ (nonnull instancetype)decryptorWithBlock:(nonnull SDWebImageDownloaderDecryptorBlock)block;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
/// Convenience way to create decryptor for common data encryption.
|
||||
|
||||
@ -37,6 +37,9 @@ typedef NSURLRequest * _Nullable (^SDWebImageDownloaderRequestModifierBlock)(NSU
|
||||
/// @param block A block to control modifier logic
|
||||
+ (nonnull instancetype)requestModifierWithBlock:(nonnull SDWebImageDownloaderRequestModifierBlock)block;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
|
||||
@ -37,6 +37,9 @@ typedef NSURLResponse * _Nullable (^SDWebImageDownloaderResponseModifierBlock)(N
|
||||
/// @param block A block to control modifier logic
|
||||
+ (nonnull instancetype)responseModifierWithBlock:(nonnull SDWebImageDownloaderResponseModifierBlock)block;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
|
||||
@ -510,6 +510,16 @@ static id<SDImageLoader> _defaultImageLoader;
|
||||
// Case that transformer on thumbnail, which this time need full pixel image
|
||||
UIImage *transformedImage = [transformer transformedImageWithImage:cacheImage forKey:key];
|
||||
if (transformedImage) {
|
||||
// We need keep some metadata from the full size image when needed
|
||||
// Because most of our transformer does not care about these information
|
||||
BOOL preserveImageMetadata = YES;
|
||||
if ([transformer respondsToSelector:@selector(preserveImageMetadata)]) {
|
||||
preserveImageMetadata = transformer.preserveImageMetadata;
|
||||
}
|
||||
if (preserveImageMetadata) {
|
||||
SDImageCopyAssociatedObject(cacheImage, transformedImage);
|
||||
}
|
||||
// Mark the transformed
|
||||
transformedImage.sd_isTransformed = YES;
|
||||
[self callStoreOriginCacheProcessForOperation:operation url:url options:options context:context originalImage:originalImage cacheImage:transformedImage originalData:originalData cacheData:nil cacheType:cacheType finished:finished completed:completedBlock];
|
||||
} else {
|
||||
|
||||
@ -38,6 +38,9 @@ typedef SDWebImageOptionsResult * _Nullable(^SDWebImageOptionsProcessorBlock)(NS
|
||||
*/
|
||||
- (nonnull instancetype)initWithOptions:(SDWebImageOptions)options context:(nullable SDWebImageContext *)context;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
/**
|
||||
@ -69,4 +72,7 @@ typedef SDWebImageOptionsResult * _Nullable(^SDWebImageOptionsProcessorBlock)(NS
|
||||
- (nonnull instancetype)initWithBlock:(nonnull SDWebImageOptionsProcessorBlock)block;
|
||||
+ (nonnull instancetype)optionsProcessorWithBlock:(nonnull SDWebImageOptionsProcessorBlock)block;
|
||||
|
||||
- (nonnull instancetype)init NS_UNAVAILABLE;
|
||||
+ (nonnull instancetype)new NS_UNAVAILABLE;
|
||||
|
||||
@end
|
||||
|
||||
@ -61,6 +61,18 @@ const int64_t SDWebImageProgressUnitCountUnknown = 1LL;
|
||||
setImageBlock:(nullable SDSetImageBlock)setImageBlock
|
||||
progress:(nullable SDImageLoaderProgressBlock)progressBlock
|
||||
completed:(nullable SDInternalCompletionBlock)completedBlock {
|
||||
|
||||
// Very common mistake is to send the URL using NSString object instead of NSURL. For some strange reason, Xcode won't
|
||||
// throw any warning for this type mismatch. Here we failsafe this error by allowing URLs to be passed as NSString.
|
||||
// if url is NSString and shouldUseWeakMemoryCache is true, [cacheKeyForURL:context] will crash. just for a global protect.
|
||||
if ([url isKindOfClass:NSString.class]) {
|
||||
url = [NSURL URLWithString:(NSString *)url];
|
||||
}
|
||||
// Prevents app crashing on argument type error like sending NSNull instead of NSURL
|
||||
if (![url isKindOfClass:NSURL.class]) {
|
||||
url = nil;
|
||||
}
|
||||
|
||||
if (context) {
|
||||
// copy to avoid mutable object
|
||||
context = [context copy];
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.9.0</string>
|
||||
<string>5.9.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.9.0</string>
|
||||
<string>5.9.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>7.0.1</string>
|
||||
<string>6.5.16</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.3.0</string>
|
||||
<string>1.3.3</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.4.1</string>
|
||||
<string>3.4.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.7.6</string>
|
||||
<string>3.7.9</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -4,12 +4,19 @@ ${BUILT_PRODUCTS_DIR}/BRPickerView/BRPickerView.framework
|
||||
${BUILT_PRODUCTS_DIR}/CYLTabBarController/CYLTabBarController.framework
|
||||
${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework
|
||||
${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework
|
||||
${BUILT_PRODUCTS_DIR}/GYSide/GYSide.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||
${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/JXSegmentedView/JXSegmentedView.framework
|
||||
${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework
|
||||
${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework
|
||||
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
|
||||
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
|
||||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
|
||||
${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework
|
||||
${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework
|
||||
${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
|
||||
${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK/AppLovinSDK.framework/AppLovinSDK
|
||||
@ -3,12 +3,19 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BRPickerView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CYLTabBarController.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FSPagerView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GYSide.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JXSegmentedView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppLovinSDK.framework
|
||||
@ -4,12 +4,19 @@ ${BUILT_PRODUCTS_DIR}/BRPickerView/BRPickerView.framework
|
||||
${BUILT_PRODUCTS_DIR}/CYLTabBarController/CYLTabBarController.framework
|
||||
${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework
|
||||
${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework
|
||||
${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework
|
||||
${BUILT_PRODUCTS_DIR}/GYSide/GYSide.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||
${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/JXSegmentedView/JXSegmentedView.framework
|
||||
${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework
|
||||
${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework
|
||||
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||
${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework
|
||||
${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework
|
||||
${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework
|
||||
${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework
|
||||
${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework
|
||||
${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework
|
||||
${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK/AppLovinSDK.framework/AppLovinSDK
|
||||
@ -3,12 +3,19 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BRPickerView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CYLTabBarController.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FLAnimatedImage.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FSPagerView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GYSide.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardManagerSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JXSegmentedView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJExtension.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SVProgressHUD.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Lottie.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AppLovinSDK.framework
|
||||
@ -181,15 +181,22 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/CYLTabBarController/CYLTabBarController.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GYSide/GYSide.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/JXSegmentedView/JXSegmentedView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
|
||||
install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK/AppLovinSDK.framework"
|
||||
fi
|
||||
if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework"
|
||||
@ -197,15 +204,22 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/CYLTabBarController/CYLTabBarController.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FLAnimatedImage/FLAnimatedImage.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FSPagerView/FSPagerView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GYSide/GYSide.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/JXSegmentedView/JXSegmentedView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/MJExtension/MJExtension.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SVProgressHUD/SVProgressHUD.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/lottie-ios/Lottie.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework"
|
||||
install_framework "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK/AppLovinSDK.framework"
|
||||
fi
|
||||
if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
|
||||
wait
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController/CYLTabBarController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide/GYSide.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView/JXSegmentedView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/Ads-Global/SDK" "${PODS_ROOT}/AppLovinDSPLinkedInAdapter/AppLovinDSPLinkedInAdapter-1.2.2.0" "${PODS_ROOT}/AppLovinMediationByteDanceAdapter/AppLovinMediationByteDanceAdapter-5.9.0.6.0" "${PODS_ROOT}/AppLovinMediationVungleAdapter/AppLovinMediationVungleAdapter-7.3.1.0" "${PODS_ROOT}/AppLovinSDK/applovin-ios-sdk-12.4.1" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalAFN" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalAPM" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalFoundation" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalGecko" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalHeader" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalNETWork" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalSDWebImage" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalYYModel" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalZFPlayer" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalZip" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_ROOT}/LinkedinAudienceNetwork" "${PODS_ROOT}/VungleAds/static" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-Global/BUAdSDK_Compatible" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-Global/BURelyAdSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/LinkedinAudienceNetwork" "${PODS_XCFRAMEWORKS_BUILD_DIR}/VungleAds"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController/CYLTabBarController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide/GYSide.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView/JXSegmentedView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BURelyFoundation_Global" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinDSPLinkedInAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationByteDanceAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationVungleAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/AFNetworking/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/APM/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Foundation/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Gecko/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Header/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/NETWork/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/SDWebImage/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/YYModel/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/ZFPlayer/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Zip/Headers" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "Alamofire" -framework "BRPickerView" -framework "CFNetwork" -framework "CYLTabBarController" -framework "CoreGraphics" -framework "FLAnimatedImage" -framework "FSPagerView" -framework "Foundation" -framework "GYSide" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JXSegmentedView" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "QuartzCore" -framework "SDWebImage" -framework "SVProgressHUD" -framework "SnapKit" -framework "UIKit" -weak_framework "Combine" -weak_framework "SwiftUI"
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinDSPLinkedInAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationByteDanceAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationVungleAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/AFNetworking" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/APM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Foundation" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Gecko" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Header" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/NETWork" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/SDWebImage" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/YYModel" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/ZFPlayer" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Zip" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"BURelyFoundationGlobalAFN" -l"BURelyFoundationGlobalAPM" -l"BURelyFoundationGlobalFoundation" -l"BURelyFoundationGlobalGecko" -l"BURelyFoundationGlobalHeader" -l"BURelyFoundationGlobalNETWork" -l"BURelyFoundationGlobalSDWebImage" -l"BURelyFoundationGlobalYYModel" -l"BURelyFoundationGlobalZFPlayer" -l"BURelyFoundationGlobalZip" -l"ByteDanceAdapter" -l"LinkedInAdapter" -l"VungleAdapter" -l"bz2" -l"c++" -l"c++abi" -l"iconv" -l"resolv" -l"resolv.9" -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AppLovinSDK" -framework "AudioToolbox" -framework "BRPickerView" -framework "BURelyAdSDK" -framework "CFNetwork" -framework "CYLTabBarController" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "FBLPromises" -framework "FLAnimatedImage" -framework "FSPagerView" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreInternal" -framework "FirebaseInstallations" -framework "Foundation" -framework "GYSide" -framework "GoogleAppMeasurement" -framework "GoogleAppMeasurementIdentitySupport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JXSegmentedView" -framework "JavaScriptCore" -framework "LinkedinAudienceNetwork" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "MediaPlayer" -framework "MessageUI" -framework "MobileCoreServices" -framework "PAGAdSDK" -framework "QuartzCore" -framework "SDWebImage" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "VungleAdsSDK" -framework "WebKit" -framework "_LinkedinAudienceNetworkCoreInternal" -framework "_LinkedinAudienceNetworkExperimentationInternal" -framework "_LinkedinAudienceNetworkIdentityInternal" -framework "nanopb" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "CoreML" -weak_framework "DeviceCheck" -weak_framework "Foundation" -weak_framework "SwiftUI" -weak_framework "UIKit" -weak_framework "WebKit"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController/CYLTabBarController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide/GYSide.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView/JXSegmentedView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/Ads-Global/SDK" "${PODS_ROOT}/AppLovinDSPLinkedInAdapter/AppLovinDSPLinkedInAdapter-1.2.2.0" "${PODS_ROOT}/AppLovinMediationByteDanceAdapter/AppLovinMediationByteDanceAdapter-5.9.0.6.0" "${PODS_ROOT}/AppLovinMediationVungleAdapter/AppLovinMediationVungleAdapter-7.3.1.0" "${PODS_ROOT}/AppLovinSDK/applovin-ios-sdk-12.4.1" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalAFN" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalAPM" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalFoundation" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalGecko" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalHeader" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalNETWork" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalSDWebImage" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalYYModel" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalZFPlayer" "${PODS_ROOT}/BURelyFoundation_Global/Frameworks/SDK/BURelyFoundationGlobalZip" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_ROOT}/LinkedinAudienceNetwork" "${PODS_ROOT}/VungleAds/static" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-Global/BUAdSDK_Compatible" "${PODS_XCFRAMEWORKS_BUILD_DIR}/Ads-Global/BURelyAdSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinSDK" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/AdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/LinkedinAudienceNetwork" "${PODS_XCFRAMEWORKS_BUILD_DIR}/VungleAds"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) PB_FIELD_32BIT=1 PB_NO_PACKED_STRUCTS=1 PB_ENABLE_MALLOC=1
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BRPickerView/BRPickerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CYLTabBarController/CYLTabBarController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FLAnimatedImage/FLAnimatedImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FSPagerView/FSPagerView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GYSide/GYSide.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/JXSegmentedView/JXSegmentedView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/BURelyFoundation_Global" "${PODS_ROOT}/Headers/Public/Firebase" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinDSPLinkedInAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationByteDanceAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationVungleAdapter/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/AFNetworking/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/APM/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Foundation/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Gecko/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Header/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/NETWork/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/SDWebImage/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/YYModel/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/ZFPlayer/Headers" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Zip/Headers" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks'
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -l"swiftCoreGraphics" -framework "Alamofire" -framework "BRPickerView" -framework "CFNetwork" -framework "CYLTabBarController" -framework "CoreGraphics" -framework "FLAnimatedImage" -framework "FSPagerView" -framework "Foundation" -framework "GYSide" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JXSegmentedView" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "QuartzCore" -framework "SDWebImage" -framework "SVProgressHUD" -framework "SnapKit" -framework "UIKit" -weak_framework "Combine" -weak_framework "SwiftUI"
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinDSPLinkedInAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationByteDanceAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AppLovinMediationVungleAdapter" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/AFNetworking" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/APM" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Foundation" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Gecko" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Header" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/NETWork" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/SDWebImage" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/YYModel" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/ZFPlayer" "${PODS_XCFRAMEWORKS_BUILD_DIR}/BURelyFoundation_Global/Zip" "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"BURelyFoundationGlobalAFN" -l"BURelyFoundationGlobalAPM" -l"BURelyFoundationGlobalFoundation" -l"BURelyFoundationGlobalGecko" -l"BURelyFoundationGlobalHeader" -l"BURelyFoundationGlobalNETWork" -l"BURelyFoundationGlobalSDWebImage" -l"BURelyFoundationGlobalYYModel" -l"BURelyFoundationGlobalZFPlayer" -l"BURelyFoundationGlobalZip" -l"ByteDanceAdapter" -l"LinkedInAdapter" -l"VungleAdapter" -l"bz2" -l"c++" -l"c++abi" -l"iconv" -l"resolv" -l"resolv.9" -l"sqlite3" -l"swiftCoreGraphics" -l"xml2" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AppLovinSDK" -framework "AudioToolbox" -framework "BRPickerView" -framework "BURelyAdSDK" -framework "CFNetwork" -framework "CYLTabBarController" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreImage" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreServices" -framework "CoreTelephony" -framework "CoreText" -framework "FBLPromises" -framework "FLAnimatedImage" -framework "FSPagerView" -framework "FirebaseAnalytics" -framework "FirebaseCore" -framework "FirebaseCoreInternal" -framework "FirebaseInstallations" -framework "Foundation" -framework "GYSide" -framework "GoogleAppMeasurement" -framework "GoogleAppMeasurementIdentitySupport" -framework "GoogleUtilities" -framework "IQKeyboardManagerSwift" -framework "ImageIO" -framework "JXSegmentedView" -framework "JavaScriptCore" -framework "LinkedinAudienceNetwork" -framework "Lottie" -framework "MJExtension" -framework "MJRefresh" -framework "MediaPlayer" -framework "MessageUI" -framework "MobileCoreServices" -framework "PAGAdSDK" -framework "QuartzCore" -framework "SDWebImage" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -framework "VungleAdsSDK" -framework "WebKit" -framework "_LinkedinAudienceNetworkCoreInternal" -framework "_LinkedinAudienceNetworkExperimentationInternal" -framework "_LinkedinAudienceNetworkIdentityInternal" -framework "nanopb" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "CoreML" -weak_framework "DeviceCheck" -weak_framework "Foundation" -weak_framework "SwiftUI" -weak_framework "UIKit" -weak_framework "WebKit"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.19.0</string>
|
||||
<string>5.19.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>5.19.0</string>
|
||||
<string>5.19.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
|
||||
@ -10,6 +10,7 @@
|
||||
47E2910BA14539535986845C /* Pods_wallpaper_project.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5FABA9F86ED5CD475E3A3424 /* Pods_wallpaper_project.framework */; };
|
||||
75200B6D2BA7D34F00BA65FD /* WA_limitsVCViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75200B6B2BA7D34F00BA65FD /* WA_limitsVCViewController.swift */; };
|
||||
75200B6E2BA7D34F00BA65FD /* WA_limitsVCViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 75200B6C2BA7D34F00BA65FD /* WA_limitsVCViewController.xib */; };
|
||||
757E9AF22BD26A8000EF854A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 757E9AF12BD26A8000EF854A /* GoogleService-Info.plist */; };
|
||||
759BB0602BABE3EC001C0031 /* loanding.json in Resources */ = {isa = PBXBuildFile; fileRef = 759BB05F2BABE3EC001C0031 /* loanding.json */; };
|
||||
759BB0622BAD35D7001C0031 /* loadProgress.json in Resources */ = {isa = PBXBuildFile; fileRef = 759BB0612BAD35D6001C0031 /* loadProgress.json */; };
|
||||
75A14D932BA1A9760091D9AD /* WA_PrivacyVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75A14D912BA1A9760091D9AD /* WA_PrivacyVC.swift */; };
|
||||
@ -135,6 +136,7 @@
|
||||
6E8D6164F3693D0725EEBE1E /* Pods-wallpaper_project.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-wallpaper_project.debug.xcconfig"; path = "Target Support Files/Pods-wallpaper_project/Pods-wallpaper_project.debug.xcconfig"; sourceTree = "<group>"; };
|
||||
75200B6B2BA7D34F00BA65FD /* WA_limitsVCViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WA_limitsVCViewController.swift; sourceTree = "<group>"; };
|
||||
75200B6C2BA7D34F00BA65FD /* WA_limitsVCViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = WA_limitsVCViewController.xib; sourceTree = "<group>"; };
|
||||
757E9AF12BD26A8000EF854A /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||
759BB05F2BABE3EC001C0031 /* loanding.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = loanding.json; sourceTree = "<group>"; };
|
||||
759BB0612BAD35D6001C0031 /* loadProgress.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = loadProgress.json; sourceTree = "<group>"; };
|
||||
75A14D912BA1A9760091D9AD /* WA_PrivacyVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WA_PrivacyVC.swift; sourceTree = "<group>"; };
|
||||
@ -569,6 +571,7 @@
|
||||
75E288A32BA0542F0049AB56 /* json */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
757E9AF12BD26A8000EF854A /* GoogleService-Info.plist */,
|
||||
75A8F1252BB54082004B0F5C /* my_wallpaper.json */,
|
||||
75A8F10B2BB42A32004B0F5C /* rankJson.json */,
|
||||
759BB0612BAD35D6001C0031 /* loadProgress.json */,
|
||||
@ -600,7 +603,8 @@
|
||||
75E288192B9EB0700049AB56 /* Sources */,
|
||||
75E2881A2B9EB0700049AB56 /* Frameworks */,
|
||||
75E2881B2B9EB0700049AB56 /* Resources */,
|
||||
361BFE77C57235A052CACEBC /* [CP] Embed Pods Frameworks */,
|
||||
581B851718AAE91D8467FD71 /* [CP] Embed Pods Frameworks */,
|
||||
F52E1CA348C5759A084334E9 /* [CP] Copy Pods Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
@ -714,6 +718,7 @@
|
||||
75E2887E2B9EDDC60049AB56 /* WA_WallpaperCollectionCell.xib in Resources */,
|
||||
75A8F13D2BB547A9004B0F5C /* WA_NHTypeCollectCell.xib in Resources */,
|
||||
75E288662B9EB2CF0049AB56 /* WA_HomeVC.xib in Resources */,
|
||||
757E9AF22BD26A8000EF854A /* GoogleService-Info.plist in Resources */,
|
||||
75E288872B9EEA820049AB56 /* 4k.json in Resources */,
|
||||
75A8F0F02BB3FADF004B0F5C /* WA_HistoryCell.xib in Resources */,
|
||||
75E2889D2BA034140049AB56 /* WA_LiveVideoVC.xib in Resources */,
|
||||
@ -760,7 +765,7 @@
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
361BFE77C57235A052CACEBC /* [CP] Embed Pods Frameworks */ = {
|
||||
581B851718AAE91D8467FD71 /* [CP] Embed Pods Frameworks */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@ -799,6 +804,23 @@
|
||||
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;
|
||||
};
|
||||
F52E1CA348C5759A084334E9 /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-wallpaper_project/Pods-wallpaper_project-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputFileListPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-wallpaper_project/Pods-wallpaper_project-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-wallpaper_project/Pods-wallpaper_project-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
@ -1029,6 +1051,7 @@
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
MTL_FAST_MATH = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_COMPILATION_MODE = wholemodule;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
@ -1039,13 +1062,16 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 6E8D6164F3693D0725EEBE1E /* Pods-wallpaper_project.debug.xcconfig */;
|
||||
buildSettings = {
|
||||
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 6HWQW9JC74;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_PREFIX_HEADER = "$(SRCROOT)/wallpaper_project/Header/WallPaperPCH.pch";
|
||||
GCC_WARN_INHIBIT_ALL_WARNINGS = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@ -1062,7 +1088,8 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.wallpapaer.hd.live.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@ -1080,13 +1107,16 @@
|
||||
isa = XCBuildConfiguration;
|
||||
baseConfigurationReference = 7CD2C49312B61AD4EA272EF7 /* Pods-wallpaper_project.release.xcconfig */;
|
||||
buildSettings = {
|
||||
ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES;
|
||||
ARCHS = "$(ARCHS_STANDARD)";
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 6;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
DEVELOPMENT_TEAM = 6HWQW9JC74;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = NO;
|
||||
EXCLUDED_ARCHS = "";
|
||||
GCC_PREFIX_HEADER = "$(SRCROOT)/wallpaper_project/Header/WallPaperPCH.pch";
|
||||
GCC_WARN_INHIBIT_ALL_WARNINGS = NO;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
@ -1103,7 +1133,8 @@
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0;
|
||||
MARKETING_VERSION = 2.0;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.wallpapaer.hd.live.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
|
||||
@ -7,7 +7,25 @@
|
||||
<key>wallpaper_project.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>20</integer>
|
||||
<integer>46</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>75E2881C2B9EB0700049AB56</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>75E288322B9EB0740049AB56</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
<key>75E2883C2B9EB0740049AB56</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
||||
Binary file not shown.
@ -7,12 +7,21 @@
|
||||
|
||||
import UIKit
|
||||
import IQKeyboardManagerSwift
|
||||
import AppLovinSDK
|
||||
import FirebaseCore
|
||||
import FirebaseAnalytics
|
||||
|
||||
@main
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
var interstitialAd: MAInterstitialAd!
|
||||
var retryAttempt = 0.0
|
||||
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
|
||||
FirebaseApp.configure()
|
||||
|
||||
IQKeyboardManager.shared.enable = true
|
||||
let splashViewController = WA_limitsVCViewController()
|
||||
// 设置启动视图控制器为应用程序的根视图控制器
|
||||
@ -29,7 +38,110 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// 设置 isFirstLaunch 标志为 true
|
||||
UserDefaults.standard.set(true, forKey: "isFirstLaunch")
|
||||
}
|
||||
|
||||
let initConfig = ALSdkInitializationConfiguration(sdkKey: "O9SUDhhvnysqkmTqrvetcbJ1wp1OHnxXF9xdpu2TmR4Ppq3w35mn3d2iy2g4OHvGWPl0EJ6D7H5FpGK5izye1A") { builder in
|
||||
builder.mediationProvider = ALMediationProviderMAX
|
||||
}
|
||||
|
||||
// Initialize the SDK with the configuration
|
||||
ALSdk.shared().initialize(with: initConfig) { sdkConfig in
|
||||
// Start loading ads
|
||||
}
|
||||
|
||||
self.createInterstitialAd()
|
||||
if interstitialAd.isReady {
|
||||
interstitialAd.show()
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
}
|
||||
|
||||
if UserDefaults.standard.object(forKey: "issave") != nil {
|
||||
// return UserDefaults.standard.bool(forKey: "issave")
|
||||
issave(false)
|
||||
} else {
|
||||
// 默认返回未登录状态
|
||||
issave(false)
|
||||
}
|
||||
if UserDefaults.standard.object(forKey: "issure") != nil {
|
||||
// return UserDefaults.standard.bool(forKey: "issave")
|
||||
issure(false)
|
||||
} else {
|
||||
// 默认返回未登录状态
|
||||
issure(false)
|
||||
}
|
||||
|
||||
Analytics.logEvent("goin_app", parameters: nil)
|
||||
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
func applicationDidFinishLaunching(_ application: UIApplication) {
|
||||
let initConfig = ALSdkInitializationConfiguration(sdkKey: "O9SUDhhvnysqkmTqrvetcbJ1wp1OHnxXF9xdpu2TmR4Ppq3w35mn3d2iy2g4OHvGWPl0EJ6D7H5FpGK5izye1A") { builder in
|
||||
|
||||
builder.mediationProvider = ALMediationProviderMAX
|
||||
|
||||
// Perform any additional configuration/setting changes
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension AppDelegate: MAAdDelegate
|
||||
{
|
||||
func createInterstitialAd()
|
||||
{
|
||||
interstitialAd = MAInterstitialAd(adUnitIdentifier: "789b377f3ac4010e")
|
||||
interstitialAd.delegate = self
|
||||
|
||||
// Load the first ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
|
||||
// MARK: MAAdDelegate Protocol
|
||||
|
||||
func didLoad(_ ad: MAAd)
|
||||
{
|
||||
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
|
||||
|
||||
// Reset retry attempt
|
||||
retryAttempt = 0
|
||||
}
|
||||
|
||||
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to load
|
||||
// We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds)
|
||||
|
||||
retryAttempt += 1
|
||||
let delaySec = pow(2.0, min(6.0, retryAttempt))
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
|
||||
self.interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
func didDisplay(_ ad: MAAd)
|
||||
{
|
||||
// Pause your app's background audio
|
||||
}
|
||||
|
||||
func didClick(_ ad: MAAd) {}
|
||||
|
||||
func didHide(_ ad: MAAd)
|
||||
{
|
||||
// Resume your app's background audio
|
||||
// Interstitial ad is hidden. Pre-load the next ad
|
||||
interstitialAd.load()
|
||||
|
||||
WA_TabbarCommon.TabBarController()
|
||||
|
||||
}
|
||||
|
||||
func didFail(toDisplay ad: MAAd, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to display. We recommend loading the next ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,5 +12,7 @@
|
||||
#import <MJExtension.h>
|
||||
#import <MJRefresh.h>
|
||||
#import <FLAnimatedImage.h>
|
||||
#import <Firebase/Firebase.h>
|
||||
|
||||
//#import <SCRecorder.h>
|
||||
#endif /* Wallpaper_Header_h */
|
||||
|
||||
@ -6,14 +6,25 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
import AppLovinSDK
|
||||
import FirebaseAnalytics
|
||||
class WA_NewHomeVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBOutlet weak var tableView: UITableView!
|
||||
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
setTableView()
|
||||
// 创建 ExampleViewController 实例
|
||||
|
||||
|
||||
// 添加 ExampleViewController 到当前视图控制器中
|
||||
// addChild(exampleViewController)
|
||||
// view.addSubview(exampleViewController.view)
|
||||
// exampleViewController.didMove(toParent: self)
|
||||
Analytics.logEvent("in_home", parameters: nil)
|
||||
}
|
||||
|
||||
func setTableView(){
|
||||
@ -30,8 +41,11 @@ class WA_NewHomeVC: WA_RootVC {
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
navigationController?.navigationBar.isHidden = true
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
extension WA_NewHomeVC:UITableViewDelegate,UITableViewDataSource{
|
||||
|
||||
@ -95,3 +109,5 @@ extension UIApplication {
|
||||
return base
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ import UIKit
|
||||
import JXSegmentedView
|
||||
import MJExtension
|
||||
import MJRefresh
|
||||
import FirebaseAnalytics
|
||||
|
||||
class WA_4KVC: WA_RootVC {
|
||||
|
||||
@ -36,7 +37,7 @@ class WA_4KVC: WA_RootVC {
|
||||
var type:Int = 0
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
Analytics.logEvent("in_4k", parameters: nil)
|
||||
self.view.backgroundColor = .white
|
||||
setCollectionView()
|
||||
|
||||
|
||||
@ -9,6 +9,8 @@ import UIKit
|
||||
import SDWebImage
|
||||
import Photos
|
||||
import SVProgressHUD
|
||||
import AppLovinSDK
|
||||
import FirebaseAnalytics
|
||||
|
||||
class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
@ -32,6 +34,9 @@ class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
var type:Int = 0
|
||||
|
||||
var interstitialAd: MAInterstitialAd!
|
||||
var retryAttempt = 0.0
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
if type == 1{
|
||||
@ -41,7 +46,7 @@ class WA_DetailsVC: WA_RootVC {
|
||||
let imageURL = URL(string: modeltype.source ?? "")
|
||||
preimageV.sd_setImage(with: imageURL, placeholderImage: UIImage(named: "Rectangle"))
|
||||
}
|
||||
|
||||
Analytics.logEvent("in_Details", parameters: nil)
|
||||
|
||||
|
||||
setBtn.layer.cornerRadius = 10
|
||||
@ -84,14 +89,39 @@ class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBAction func setting(_ sender: Any) {
|
||||
|
||||
Analytics.logEvent("touch_savephoto", parameters: nil)
|
||||
self.activityView.startAnimating()
|
||||
saveImageToPhotoLibrary()
|
||||
|
||||
if interstitialAd.isReady {
|
||||
interstitialAd.show()
|
||||
Analytics.logEvent("details_load_success", parameters: nil)
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
Analytics.logEvent("details_load_fail", parameters: nil)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
navigationController?.navigationBar.isHidden = true
|
||||
self.createInterstitialAd()
|
||||
if UserDefaults.standard.object(forKey: "issave") != nil {
|
||||
// return UserDefaults.standard.bool(forKey: "issave")
|
||||
issave(true)
|
||||
} else {
|
||||
// 默认返回未登录状态
|
||||
|
||||
if interstitialAd.isReady {
|
||||
interstitialAd.show()
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
}
|
||||
issave(true)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func saveImageToPhotoLibrary() {
|
||||
@ -133,33 +163,12 @@ class WA_DetailsVC: WA_RootVC {
|
||||
}) { success, error in
|
||||
if success {
|
||||
print("图片保存成功")
|
||||
// DispatchQueue.main.asyncAfter(deadline: .now() + 0){
|
||||
// self.activityView.stopAnimating()
|
||||
// }
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0){
|
||||
self.activityView.stopAnimating()
|
||||
// self.view.makeToast("Save Success", duration: 1.5, position: .center)
|
||||
// 创建一个 UIAlertController
|
||||
let alertController = UIAlertController(title: "Successfully saved", message: "Do you need to set up a tutorial", preferredStyle: .alert)
|
||||
|
||||
// 添加一个取消按钮
|
||||
alertController.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil))
|
||||
|
||||
// 添加一个确定按钮
|
||||
alertController.addAction(UIAlertAction(title: "Need", style: .default, handler: { action in
|
||||
// 点击确定按钮后执行的操作
|
||||
// print("点击了确定按钮")
|
||||
let vc = WA_TipVC()
|
||||
self.present(vc, animated: true)
|
||||
}))
|
||||
|
||||
// 在当前视图控制器中 present 显示提示框
|
||||
self.present(alertController, animated: true, completion: nil)
|
||||
|
||||
}
|
||||
}
|
||||
// DispatchQueue.main.asyncAfter(deadline: .now() + 0){
|
||||
// self.activityView.stopAnimating()
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
} else if let error = error {
|
||||
print("图片保存失败:\(error.localizedDescription)")
|
||||
@ -173,6 +182,7 @@ class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBAction func collectBtn(_ sender: Any) {
|
||||
Analytics.logEvent("touch_collect", parameters: nil)
|
||||
if isLoggedIn(){
|
||||
if type == 1{
|
||||
let model1 = WA_3DModel()
|
||||
@ -208,6 +218,7 @@ class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBAction func previewBtn(_ sender: Any) {
|
||||
Analytics.logEvent("touch_preview", parameters: nil)
|
||||
UIView.animate(withDuration: 0.5, animations: {
|
||||
self.bgView.frame.origin.y += 0
|
||||
self.bgView.alpha = 0
|
||||
@ -272,6 +283,7 @@ class WA_DetailsVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBAction func shareBtn(_ sender: Any) {
|
||||
Analytics.logEvent("touch_share", parameters: nil)
|
||||
|
||||
self.activityView.startAnimating()
|
||||
|
||||
@ -318,3 +330,81 @@ class WA_DetailsVC: WA_RootVC {
|
||||
}
|
||||
|
||||
}
|
||||
extension WA_DetailsVC: MAAdDelegate
|
||||
{
|
||||
func createInterstitialAd()
|
||||
{
|
||||
interstitialAd = MAInterstitialAd(adUnitIdentifier: "880a042774979c3c")
|
||||
interstitialAd.delegate = self
|
||||
|
||||
// Load the first ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
|
||||
// MARK: MAAdDelegate Protocol
|
||||
|
||||
func didLoad(_ ad: MAAd)
|
||||
{
|
||||
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
|
||||
|
||||
// Reset retry attempt
|
||||
retryAttempt = 0
|
||||
}
|
||||
|
||||
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to load
|
||||
// We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds)
|
||||
|
||||
retryAttempt += 1
|
||||
let delaySec = pow(2.0, min(6.0, retryAttempt))
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
|
||||
self.interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
func didDisplay(_ ad: MAAd)
|
||||
{
|
||||
// Pause your app's background audio
|
||||
}
|
||||
|
||||
func didClick(_ ad: MAAd) {}
|
||||
|
||||
func didHide(_ ad: MAAd)
|
||||
{
|
||||
// Resume your app's background audio
|
||||
// Interstitial ad is hidden. Pre-load the next ad
|
||||
interstitialAd.load()
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.5) {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0){
|
||||
self.activityView.stopAnimating()
|
||||
// self.view.makeToast("Save Success", duration: 1.5, position: .center)
|
||||
// 创建一个 UIAlertController
|
||||
let alertController = UIAlertController(title: "Successfully saved", message: "Do you need to set up a tutorial", preferredStyle: .alert)
|
||||
|
||||
// 添加一个取消按钮
|
||||
alertController.addAction(UIAlertAction(title: "cancel", style: .cancel, handler: nil))
|
||||
|
||||
// 添加一个确定按钮
|
||||
alertController.addAction(UIAlertAction(title: "Need", style: .default, handler: { action in
|
||||
// 点击确定按钮后执行的操作
|
||||
// print("点击了确定按钮")
|
||||
let vc = WA_TipVC()
|
||||
self.present(vc, animated: true)
|
||||
}))
|
||||
|
||||
// 在当前视图控制器中 present 显示提示框
|
||||
self.present(alertController, animated: true, completion: nil)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func didFail(toDisplay ad: MAAd, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to display. We recommend loading the next ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,6 +8,8 @@
|
||||
import UIKit
|
||||
import JXSegmentedView
|
||||
import MJRefresh
|
||||
import FirebaseAnalytics
|
||||
|
||||
|
||||
class WA_LIVEVC: WA_RootVC {
|
||||
|
||||
@ -33,7 +35,7 @@ class WA_LIVEVC: WA_RootVC {
|
||||
self.view.backgroundColor = .white
|
||||
setCollectionView()
|
||||
|
||||
|
||||
Analytics.logEvent("in_live", parameters: nil)
|
||||
setRefresh()
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,8 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>ALSdkInitializationConfiguration</key>
|
||||
<string>O9SUDhhvnysqkmTqrvetcbJ1wp1OHnxXF9xdpu2TmR4Ppq3w35mn3d2iy2g4OHvGWPl0EJ6D7H5FpGK5izye1A</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import FirebaseAnalytics
|
||||
|
||||
class WA_RootVC: UIViewController {
|
||||
|
||||
|
||||
@ -9,29 +9,41 @@ import UIKit
|
||||
import SVProgressHUD
|
||||
import Photos
|
||||
import Alamofire
|
||||
import AppLovinSDK
|
||||
import FirebaseAnalytics
|
||||
|
||||
class WA_limitsVCViewController: WA_RootVC {
|
||||
@IBOutlet weak var retryBtn: UIButton!
|
||||
let activityView = UIActivityIndicatorView()
|
||||
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
// 创建和加载插页广告
|
||||
|
||||
activityView.center = CGPoint(x: self.view.center.x, y: self.view.center.y - kSafeArea_Top - 44)
|
||||
// 停止后,隐藏菊花
|
||||
activityView.hidesWhenStopped = true
|
||||
activityView.color = .black
|
||||
activityView.style = UIActivityIndicatorView.Style.whiteLarge
|
||||
self.view.addSubview(activityView)
|
||||
self.activityView.startAnimating()
|
||||
|
||||
// activityView.center = CGPoint(x: self.view.center.x, y: self.view.center.y - kSafeArea_Top - 44)
|
||||
// // 停止后,隐藏菊花
|
||||
// activityView.hidesWhenStopped = true
|
||||
// activityView.color = .black
|
||||
// activityView.style = UIActivityIndicatorView.Style.whiteLarge
|
||||
// self.view.addSubview(activityView)
|
||||
// self.activityView.startAnimating()
|
||||
requestPhotoLibraryPermission()
|
||||
setNetwork()
|
||||
|
||||
checkNetworkPermission()
|
||||
// 创建和加载插页广告
|
||||
// createInterstitialAd()
|
||||
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 8) {
|
||||
self.setNetwork()
|
||||
}
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.retryBtn.isHidden = true
|
||||
|
||||
|
||||
|
||||
}
|
||||
func requestPhotoLibraryPermission() {
|
||||
@ -65,6 +77,8 @@ class WA_limitsVCViewController: WA_RootVC {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
func setNetwork(){
|
||||
// 创建一个URL对象
|
||||
if let url = URL(string: "https://www.baidu.com/") {
|
||||
@ -76,18 +90,30 @@ class WA_limitsVCViewController: WA_RootVC {
|
||||
if let error = error {
|
||||
print("网络请求出错:\(error)")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()){
|
||||
self.activityView.stopAnimating()
|
||||
// self.activityView.stopAnimating()
|
||||
SVProgressHUD.showInfo(withStatus: "Network connection failed, please try again")
|
||||
self.retryBtn.isHidden = false
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) {
|
||||
SVProgressHUD.dismiss()
|
||||
SVProgressHUD.dismiss()
|
||||
|
||||
}
|
||||
}
|
||||
} else if let data = data {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()){
|
||||
self.navigateToMainScreen()
|
||||
if let appDelegate = UIApplication.shared.delegate as? AppDelegate {
|
||||
// appDelegate.showInterstitialAd()
|
||||
// 如果插页广告已经准备好显示,立即显示广告
|
||||
if appDelegate.interstitialAd.isReady {
|
||||
appDelegate.interstitialAd.show()
|
||||
|
||||
Analytics.logEvent("open_load_success", parameters: nil)
|
||||
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
Analytics.logEvent("open_load_fail", parameters: nil)
|
||||
self.retryBtn.isHidden = false
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -142,17 +168,17 @@ class WA_limitsVCViewController: WA_RootVC {
|
||||
NetworkReachabilityManager.default?.stopListening()
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
|
||||
}
|
||||
|
||||
|
||||
@IBAction func btnRetry(_ sender: Any) {
|
||||
self.activityView.startAnimating()
|
||||
|
||||
setNetwork()
|
||||
}
|
||||
|
||||
private func navigateToMainScreen() {
|
||||
|
||||
WA_TabbarCommon.TabBarController()
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -20,6 +20,9 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="launch" translatesAutoresizingMaskIntoConstraints="NO" id="zAy-zX-8PM">
|
||||
<rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="l04-6w-5cC">
|
||||
<rect key="frame" x="156.66666666666666" y="386" width="80" height="40"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
@ -40,6 +43,10 @@
|
||||
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="fnl-2z-Ty3" firstAttribute="trailing" secondItem="zAy-zX-8PM" secondAttribute="trailing" id="4vr-US-v6t"/>
|
||||
<constraint firstItem="zAy-zX-8PM" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="Wu4-GZ-YcJ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="zAy-zX-8PM" secondAttribute="bottom" id="X0M-gw-2Hy"/>
|
||||
<constraint firstItem="zAy-zX-8PM" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="ka0-Np-haP"/>
|
||||
<constraint firstItem="l04-6w-5cC" firstAttribute="centerY" secondItem="i5M-Pr-FkT" secondAttribute="centerY" constant="-20" id="lWG-ER-6ZY"/>
|
||||
<constraint firstItem="l04-6w-5cC" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="yG5-dN-49T"/>
|
||||
</constraints>
|
||||
@ -47,6 +54,7 @@
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="launch" width="1125" height="2436"/>
|
||||
<systemColor name="systemBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
|
||||
@ -7,6 +7,9 @@
|
||||
|
||||
import UIKit
|
||||
import SVProgressHUD
|
||||
import AppLovinSDK
|
||||
import FirebaseAnalytics
|
||||
import FirebaseCore
|
||||
|
||||
class WA_AddVC: WA_RootVC,UITextViewDelegate {
|
||||
@IBOutlet weak var contentImageV: UIImageView!
|
||||
@ -19,8 +22,12 @@ class WA_AddVC: WA_RootVC,UITextViewDelegate {
|
||||
|
||||
let activityView = UIActivityIndicatorView()
|
||||
|
||||
var interstitialAd: MAInterstitialAd!
|
||||
var retryAttempt = 0.0
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
Analytics.logEvent("in_release", parameters: nil)
|
||||
contenttextV.layer.cornerRadius = 5
|
||||
contenttextV.layer.borderColor = UIColor.black.cgColor
|
||||
contenttextV.layer.borderWidth = 1
|
||||
@ -50,6 +57,25 @@ class WA_AddVC: WA_RootVC,UITextViewDelegate {
|
||||
placeholderLabel.isHidden = !textView.text.isEmpty
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
self.createInterstitialAd()
|
||||
if UserDefaults.standard.object(forKey: "issure") != nil {
|
||||
// return UserDefaults.standard.bool(forKey: "issave")
|
||||
issure(true)
|
||||
} else {
|
||||
// 默认返回未登录状态
|
||||
|
||||
if interstitialAd.isReady {
|
||||
interstitialAd.show()
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
}
|
||||
issave(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@IBAction func backBtn(_ sender: Any) {
|
||||
self.dismiss(animated: true)
|
||||
}
|
||||
@ -68,6 +94,7 @@ class WA_AddVC: WA_RootVC,UITextViewDelegate {
|
||||
|
||||
|
||||
@IBAction func sureBtn(_ sender: Any) {
|
||||
|
||||
if self.contenttextV.text.count <= 0 {
|
||||
SVProgressHUD.showInfo(withStatus: "Please enter your recommendation reason")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 1.0) {
|
||||
@ -86,12 +113,15 @@ class WA_AddVC: WA_RootVC,UITextViewDelegate {
|
||||
self.activityView.stopAnimating()
|
||||
self.dismiss(animated: true)
|
||||
}
|
||||
SVProgressHUD.showInfo(withStatus: "Successfully published, waiting for review")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
|
||||
SVProgressHUD.dismiss()
|
||||
|
||||
|
||||
|
||||
|
||||
self.createInterstitialAd()
|
||||
|
||||
if self.interstitialAd.isReady {
|
||||
self.interstitialAd.show()
|
||||
Analytics.logEvent("release_load_success", parameters: nil)
|
||||
}else{
|
||||
print("-------广告没准备好")
|
||||
Analytics.logEvent("release_load_fail", parameters: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -134,3 +164,63 @@ extension WA_AddVC: UIImagePickerControllerDelegate & UINavigationControllerDele
|
||||
picker.dismiss(animated: true, completion: nil)
|
||||
}
|
||||
}
|
||||
extension WA_AddVC: MAAdDelegate
|
||||
{
|
||||
func createInterstitialAd()
|
||||
{
|
||||
interstitialAd = MAInterstitialAd(adUnitIdentifier: "8e1bc1f22c8d6c9d")
|
||||
interstitialAd.delegate = self
|
||||
|
||||
// Load the first ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
|
||||
// MARK: MAAdDelegate Protocol
|
||||
|
||||
func didLoad(_ ad: MAAd)
|
||||
{
|
||||
// Interstitial ad is ready to be shown. 'interstitialAd.isReady' will now return 'true'
|
||||
|
||||
// Reset retry attempt
|
||||
retryAttempt = 0
|
||||
}
|
||||
|
||||
func didFailToLoadAd(forAdUnitIdentifier adUnitIdentifier: String, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to load
|
||||
// We recommend retrying with exponentially higher delays up to a maximum delay (in this case 64 seconds)
|
||||
|
||||
retryAttempt += 1
|
||||
let delaySec = pow(2.0, min(6.0, retryAttempt))
|
||||
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + delaySec) {
|
||||
self.interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
func didDisplay(_ ad: MAAd)
|
||||
{
|
||||
// Pause your app's background audio
|
||||
}
|
||||
|
||||
func didClick(_ ad: MAAd) {}
|
||||
|
||||
func didHide(_ ad: MAAd)
|
||||
{
|
||||
// Resume your app's background audio
|
||||
// Interstitial ad is hidden. Pre-load the next ad
|
||||
|
||||
interstitialAd.load()
|
||||
SVProgressHUD.showInfo(withStatus: "Successfully published, waiting for review")
|
||||
DispatchQueue.global().asyncAfter(deadline: .now() + 2) {
|
||||
SVProgressHUD.dismiss()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func didFail(toDisplay ad: MAAd, withError error: MAError)
|
||||
{
|
||||
// Interstitial ad failed to display. We recommend loading the next ad
|
||||
interstitialAd.load()
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import FirebaseAnalytics
|
||||
import FirebaseCore
|
||||
|
||||
class WA_RankingVC: WA_RootVC {
|
||||
@IBOutlet weak var tableView: UITableView!
|
||||
@ -41,6 +43,7 @@ class WA_RankingVC: WA_RootVC {
|
||||
|
||||
|
||||
@IBAction func addBtn(_ sender: Any) {
|
||||
Analytics.logEvent("goin_release", parameters: nil)
|
||||
if isLoggedIn(){
|
||||
let vc = WA_AddVC()
|
||||
vc.modalPresentationStyle = .fullScreen
|
||||
|
||||
@ -243,3 +243,10 @@ func isLoggedIn() -> Bool {
|
||||
return false
|
||||
}
|
||||
}
|
||||
func issave(_ value: Bool) {
|
||||
UserDefaults.standard.set(value, forKey: "issave")
|
||||
}
|
||||
|
||||
func issure(_ value: Bool) {
|
||||
UserDefaults.standard.set(value, forKey: "issure")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user