Merge branch 'master' of https://gitee.com/lahanfd/lux_vpro
This commit is contained in:
commit
d97351db90
@ -47,4 +47,5 @@ pod 'FirebaseAuth'
|
||||
pod 'FirebaseFirestore'
|
||||
pod 'FacebookCore'
|
||||
pod 'FirebaseRemoteConfig'
|
||||
pod 'KeychainAccess'
|
||||
end
|
||||
|
||||
@ -1032,6 +1032,7 @@ PODS:
|
||||
- gRPC-Core/Interface (1.62.1)
|
||||
- gRPC-Core/Privacy (1.62.1)
|
||||
- GTMSessionFetcher/Core (3.3.2)
|
||||
- KeychainAccess (4.2.2)
|
||||
- Kingfisher (7.10.2)
|
||||
- leveldb-library (1.22.4)
|
||||
- LLCycleScrollView (1.6.0):
|
||||
@ -1062,6 +1063,7 @@ DEPENDENCIES:
|
||||
- FirebaseCrashlytics
|
||||
- FirebaseFirestore
|
||||
- FirebaseRemoteConfig
|
||||
- KeychainAccess
|
||||
- LLCycleScrollView
|
||||
- SnapKit
|
||||
- SVProgressHUD
|
||||
@ -1097,6 +1099,7 @@ SPEC REPOS:
|
||||
- "gRPC-C++"
|
||||
- gRPC-Core
|
||||
- GTMSessionFetcher
|
||||
- KeychainAccess
|
||||
- Kingfisher
|
||||
- leveldb-library
|
||||
- LLCycleScrollView
|
||||
@ -1137,6 +1140,7 @@ SPEC CHECKSUMS:
|
||||
"gRPC-C++": 12f33a422dcab88dcd0c53e52cd549a929f0f244
|
||||
gRPC-Core: 6ec9002832e1e22c5bb8c54994b050b0ee4205c6
|
||||
GTMSessionFetcher: 0e876eea9782ec6462e91ab872711c357322c94f
|
||||
KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
|
||||
Kingfisher: 99edc495d3b7607e6425f0d6f6847b2abd6d716d
|
||||
leveldb-library: 06a69cc7582d64b29424a63e085e683cc188230a
|
||||
LLCycleScrollView: a08f666671f9fd1a205df9defebc3c217d59abc8
|
||||
@ -1148,6 +1152,6 @@ SPEC CHECKSUMS:
|
||||
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
|
||||
TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
|
||||
|
||||
PODFILE CHECKSUM: d9797551bca99266176914268501259fabf3ff32
|
||||
PODFILE CHECKSUM: 8b568f32019a8252c34f339ce9760c2954e345fc
|
||||
|
||||
COCOAPODS: 1.15.2
|
||||
|
||||
22
SwiftProject/Pods/KeychainAccess/LICENSE
generated
Normal file
22
SwiftProject/Pods/KeychainAccess/LICENSE
generated
Normal file
@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 kishikawa katsumi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
3074
SwiftProject/Pods/KeychainAccess/Lib/KeychainAccess/Keychain.swift
generated
Normal file
3074
SwiftProject/Pods/KeychainAccess/Lib/KeychainAccess/Keychain.swift
generated
Normal file
File diff suppressed because it is too large
Load Diff
635
SwiftProject/Pods/KeychainAccess/README.md
generated
Normal file
635
SwiftProject/Pods/KeychainAccess/README.md
generated
Normal file
@ -0,0 +1,635 @@
|
||||
# KeychainAccess
|
||||
[](https://travis-ci.org/kishikawakatsumi/KeychainAccess)
|
||||
[](https://github.com/Carthage/Carthage)
|
||||
[](https://swift.org/package-manager)
|
||||
[](http://cocoadocs.org/docsets/KeychainAccess)
|
||||
[](http://cocoadocs.org/docsets/KeychainAccess)
|
||||
|
||||
KeychainAccess is a simple Swift wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs extremely easy and much more palatable to use in Swift.
|
||||
|
||||
<img src="https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/Screenshots/01.png" width="320px" />
|
||||
<img src="https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/Screenshots/02.png" width="320px" />
|
||||
<img src="https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/Screenshots/03.png" width="320px" />
|
||||
|
||||
## :bulb: Features
|
||||
|
||||
- Simple interface
|
||||
- Support access group
|
||||
- [Support accessibility](#accessibility)
|
||||
- [Support iCloud sharing](#icloud_sharing)
|
||||
- **[Support TouchID and Keychain integration (iOS 8+)](#touch_id_integration)**
|
||||
- **[Support Shared Web Credentials (iOS 8+)](#shared_web_credentials)**
|
||||
- [Works on both iOS & macOS](#requirements)
|
||||
- [watchOS and tvOS are supported](#requirements)
|
||||
- **[Mac Catalyst is supported](#requirements)**
|
||||
- **[Swift 3, 4 and 5 compatible](#requirements)**
|
||||
|
||||
## :book: Usage
|
||||
|
||||
##### :eyes: See also:
|
||||
- [:link: iOS Example Project](https://github.com/kishikawakatsumi/KeychainAccess/tree/master/Examples/Example-iOS)
|
||||
|
||||
### :key: Basics
|
||||
|
||||
#### Saving Application Password
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
#### Saving Internet Password
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
### :key: Instantiation
|
||||
|
||||
#### Create Keychain for Application Password
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
```
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared")
|
||||
```
|
||||
|
||||
#### Create Keychain for Internet Password
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
```
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https, authenticationType: .htmlForm)
|
||||
```
|
||||
|
||||
### :key: Adding an item
|
||||
|
||||
#### subscripting
|
||||
|
||||
##### for String
|
||||
|
||||
```swift
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
```swift
|
||||
keychain[string: "kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
##### for NSData
|
||||
|
||||
```swift
|
||||
keychain[data: "secret"] = NSData(contentsOfFile: "secret.bin")
|
||||
```
|
||||
|
||||
#### set method
|
||||
|
||||
```swift
|
||||
keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
```
|
||||
|
||||
#### error handling
|
||||
|
||||
```swift
|
||||
do {
|
||||
try keychain.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
}
|
||||
catch let error {
|
||||
print(error)
|
||||
}
|
||||
```
|
||||
|
||||
### :key: Obtaining an item
|
||||
|
||||
#### subscripting
|
||||
|
||||
##### for String (If the value is NSData, attempt to convert to String)
|
||||
|
||||
```swift
|
||||
let token = keychain["kishikawakatsumi"]
|
||||
```
|
||||
|
||||
```swift
|
||||
let token = keychain[string: "kishikawakatsumi"]
|
||||
```
|
||||
|
||||
##### for NSData
|
||||
|
||||
```swift
|
||||
let secretData = keychain[data: "secret"]
|
||||
```
|
||||
|
||||
#### get methods
|
||||
|
||||
##### as String
|
||||
|
||||
```swift
|
||||
let token = try? keychain.get("kishikawakatsumi")
|
||||
```
|
||||
|
||||
```swift
|
||||
let token = try? keychain.getString("kishikawakatsumi")
|
||||
```
|
||||
|
||||
##### as NSData
|
||||
|
||||
```swift
|
||||
let data = try? keychain.getData("kishikawakatsumi")
|
||||
```
|
||||
|
||||
### :key: Removing an item
|
||||
|
||||
#### subscripting
|
||||
|
||||
```swift
|
||||
keychain["kishikawakatsumi"] = nil
|
||||
```
|
||||
|
||||
#### remove method
|
||||
|
||||
```swift
|
||||
do {
|
||||
try keychain.remove("kishikawakatsumi")
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
### :key: Set Label and Comment
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
do {
|
||||
try keychain
|
||||
.label("github.com (kishikawakatsumi)")
|
||||
.comment("github access token")
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
### :key: Obtaining Other Attributes
|
||||
|
||||
#### PersistentRef
|
||||
|
||||
```swift
|
||||
let keychain = Keychain()
|
||||
let persistentRef = keychain[attributes: "kishikawakatsumi"]?.persistentRef
|
||||
...
|
||||
```
|
||||
|
||||
#### Creation Date
|
||||
|
||||
```swift
|
||||
let keychain = Keychain()
|
||||
let creationDate = keychain[attributes: "kishikawakatsumi"]?.creationDate
|
||||
...
|
||||
```
|
||||
|
||||
#### All Attributes
|
||||
|
||||
```swift
|
||||
let keychain = Keychain()
|
||||
do {
|
||||
let attributes = try keychain.get("kishikawakatsumi") { $0 }
|
||||
print(attributes?.comment)
|
||||
print(attributes?.label)
|
||||
print(attributes?.creator)
|
||||
...
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
##### subscripting
|
||||
|
||||
```swift
|
||||
let keychain = Keychain()
|
||||
if let attributes = keychain[attributes: "kishikawakatsumi"] {
|
||||
print(attributes.comment)
|
||||
print(attributes.label)
|
||||
print(attributes.creator)
|
||||
}
|
||||
```
|
||||
|
||||
### :key: Configuration (Accessibility, Sharing, iCloud Sync)
|
||||
|
||||
**Provides fluent interfaces**
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
.label("github.com (kishikawakatsumi)")
|
||||
.synchronizable(true)
|
||||
.accessibility(.afterFirstUnlock)
|
||||
```
|
||||
|
||||
#### <a name="accessibility"> Accessibility
|
||||
|
||||
##### Default accessibility matches background application (=kSecAttrAccessibleAfterFirstUnlock)
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
```
|
||||
|
||||
##### For background application
|
||||
|
||||
###### Creating instance
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
.accessibility(.afterFirstUnlock)
|
||||
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
###### One-shot
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
do {
|
||||
try keychain
|
||||
.accessibility(.afterFirstUnlock)
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
##### For foreground application
|
||||
|
||||
###### Creating instance
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
.accessibility(.whenUnlocked)
|
||||
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
###### One-shot
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
do {
|
||||
try keychain
|
||||
.accessibility(.whenUnlocked)
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
#### :couple: Sharing Keychain items
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token", accessGroup: "12ABCD3E4F.shared")
|
||||
```
|
||||
|
||||
#### <a name="icloud_sharing"> :arrows_counterclockwise: Synchronizing Keychain items with iCloud
|
||||
|
||||
###### Creating instance
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
.synchronizable(true)
|
||||
|
||||
keychain["kishikawakatsumi"] = "01234567-89ab-cdef-0123-456789abcdef"
|
||||
```
|
||||
|
||||
###### One-shot
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
do {
|
||||
try keychain
|
||||
.synchronizable(true)
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
print("error: \(error)")
|
||||
}
|
||||
```
|
||||
|
||||
### <a name="touch_id_integration"> :cyclone: Touch ID (Face ID) integration
|
||||
|
||||
**Any Operation that require authentication must be run in the background thread.**
|
||||
**If you run in the main thread, UI thread will lock for the system to try to display the authentication dialog.**
|
||||
|
||||
|
||||
**To use Face ID, add `NSFaceIDUsageDescription` key to your `Info.plist`**
|
||||
|
||||
#### :closed_lock_with_key: Adding a Touch ID (Face ID) protected item
|
||||
|
||||
If you want to store the Touch ID protected Keychain item, specify `accessibility` and `authenticationPolicy` attributes.
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
DispatchQueue.global().async {
|
||||
do {
|
||||
// Should be the secret invalidated when passcode is removed? If not then use `.WhenUnlocked`
|
||||
try keychain
|
||||
.accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence)
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
// Error handling if needed...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### :closed_lock_with_key: Updating a Touch ID (Face ID) protected item
|
||||
|
||||
The same way as when adding.
|
||||
|
||||
**Do not run in the main thread if there is a possibility that the item you are trying to add already exists, and protected.**
|
||||
**Because updating protected items requires authentication.**
|
||||
|
||||
Additionally, you want to show custom authentication prompt message when updating, specify an `authenticationPrompt` attribute.
|
||||
If the item not protected, the `authenticationPrompt` parameter just be ignored.
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
DispatchQueue.global().async {
|
||||
do {
|
||||
// Should be the secret invalidated when passcode is removed? If not then use `.WhenUnlocked`
|
||||
try keychain
|
||||
.accessibility(.whenPasscodeSetThisDeviceOnly, authenticationPolicy: .userPresence)
|
||||
.authenticationPrompt("Authenticate to update your access token")
|
||||
.set("01234567-89ab-cdef-0123-456789abcdef", key: "kishikawakatsumi")
|
||||
} catch let error {
|
||||
// Error handling if needed...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### :closed_lock_with_key: Obtaining a Touch ID (Face ID) protected item
|
||||
|
||||
The same way as when you get a normal item. It will be displayed automatically Touch ID or passcode authentication If the item you try to get is protected.
|
||||
If you want to show custom authentication prompt message, specify an `authenticationPrompt` attribute.
|
||||
If the item not protected, the `authenticationPrompt` parameter just be ignored.
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
DispatchQueue.global().async {
|
||||
do {
|
||||
let password = try keychain
|
||||
.authenticationPrompt("Authenticate to login to server")
|
||||
.get("kishikawakatsumi")
|
||||
|
||||
print("password: \(password)")
|
||||
} catch let error {
|
||||
// Error handling if needed...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### :closed_lock_with_key: Removing a Touch ID (Face ID) protected item
|
||||
|
||||
The same way as when you remove a normal item.
|
||||
There is no way to show Touch ID or passcode authentication when removing Keychain items.
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(service: "com.example.github-token")
|
||||
|
||||
do {
|
||||
try keychain.remove("kishikawakatsumi")
|
||||
} catch let error {
|
||||
// Error handling if needed...
|
||||
}
|
||||
```
|
||||
|
||||
### <a name="shared_web_credentials"> :key: Shared Web Credentials
|
||||
|
||||
> Shared web credentials is a programming interface that enables native iOS apps to share credentials with their website counterparts. For example, a user may log in to a website in Safari, entering a user name and password, and save those credentials using the iCloud Keychain. Later, the user may run a native app from the same developer, and instead of the app requiring the user to reenter a user name and password, shared web credentials gives it access to the credentials that were entered earlier in Safari. The user can also create new accounts, update passwords, or delete her account from within the app. These changes are then saved and used by Safari.
|
||||
<https://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/>
|
||||
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://www.kishikawakatsumi.com", protocolType: .HTTPS)
|
||||
|
||||
let username = "kishikawakatsumi@mac.com"
|
||||
|
||||
// First, check the credential in the app's Keychain
|
||||
if let password = try? keychain.get(username) {
|
||||
// If found password in the Keychain,
|
||||
// then log into the server
|
||||
} else {
|
||||
// If not found password in the Keychain,
|
||||
// try to read from Shared Web Credentials
|
||||
keychain.getSharedPassword(username) { (password, error) -> () in
|
||||
if password != nil {
|
||||
// If found password in the Shared Web Credentials,
|
||||
// then log into the server
|
||||
// and save the password to the Keychain
|
||||
|
||||
keychain[username] = password
|
||||
} else {
|
||||
// If not found password either in the Keychain also Shared Web Credentials,
|
||||
// prompt for username and password
|
||||
|
||||
// Log into server
|
||||
|
||||
// If the login is successful,
|
||||
// save the credentials to both the Keychain and the Shared Web Credentials.
|
||||
|
||||
keychain[username] = inputPassword
|
||||
keychain.setSharedPassword(inputPassword, account: username)
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### Request all associated domain's credentials
|
||||
|
||||
```swift
|
||||
Keychain.requestSharedWebCredential { (credentials, error) -> () in
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
#### Generate strong random password
|
||||
|
||||
Generate strong random password that is in the same format used by Safari autofill (xxx-xxx-xxx-xxx).
|
||||
|
||||
```swift
|
||||
let password = Keychain.generatePassword() // => Nhu-GKm-s3n-pMx
|
||||
```
|
||||
|
||||
#### How to set up Shared Web Credentials
|
||||
|
||||
> 1. Add a com.apple.developer.associated-domains entitlement to your app. This entitlement must include all the domains with which you want to share credentials.
|
||||
>
|
||||
> 2. Add an apple-app-site-association file to your website. This file must include application identifiers for all the apps with which the site wants to share credentials, and it must be properly signed.
|
||||
>
|
||||
> 3. When the app is installed, the system downloads and verifies the site association file for each of its associated domains. If the verification is successful, the app is associated with the domain.
|
||||
|
||||
**More details:**
|
||||
<https://developer.apple.com/library/ios/documentation/Security/Reference/SharedWebCredentialsRef/>
|
||||
|
||||
### :mag: Debugging
|
||||
|
||||
#### Display all stored items if print keychain object
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
print("\(keychain)")
|
||||
```
|
||||
|
||||
```
|
||||
=>
|
||||
[
|
||||
[authenticationType: default, key: kishikawakatsumi, server: github.com, class: internetPassword, protocol: https]
|
||||
[authenticationType: default, key: hirohamada, server: github.com, class: internetPassword, protocol: https]
|
||||
[authenticationType: default, key: honeylemon, server: github.com, class: internetPassword, protocol: https]
|
||||
]
|
||||
```
|
||||
|
||||
#### Obtaining all stored keys
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
|
||||
let keys = keychain.allKeys()
|
||||
for key in keys {
|
||||
print("key: \(key)")
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
=>
|
||||
key: kishikawakatsumi
|
||||
key: hirohamada
|
||||
key: honeylemon
|
||||
```
|
||||
|
||||
#### Obtaining all stored items
|
||||
|
||||
```swift
|
||||
let keychain = Keychain(server: "https://github.com", protocolType: .https)
|
||||
|
||||
let items = keychain.allItems()
|
||||
for item in items {
|
||||
print("item: \(item)")
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
=>
|
||||
item: [authenticationType: Default, key: kishikawakatsumi, server: github.com, class: InternetPassword, protocol: https]
|
||||
item: [authenticationType: Default, key: hirohamada, server: github.com, class: InternetPassword, protocol: https]
|
||||
item: [authenticationType: Default, key: honeylemon, server: github.com, class: InternetPassword, protocol: https]
|
||||
```
|
||||
|
||||
## Keychain sharing capability
|
||||
|
||||
If you encounter the error below, you need to add an `Keychain.entitlements`.
|
||||
|
||||
```
|
||||
OSStatus error:[-34018] Internal error when a required entitlement isn't present, client has neither application-identifier nor keychain-access-groups entitlements.
|
||||
```
|
||||
|
||||
<img alt="Screen Shot 2019-10-27 at 8 08 50" src="https://user-images.githubusercontent.com/40610/67627108-1a7f2f80-f891-11e9-97bc-7f7313cb63d1.png" width="500">
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/40610/67627072-333b1580-f890-11e9-9feb-bf507abc2724.png" width="500" />
|
||||
|
||||
## Requirements
|
||||
|
||||
| | OS | Swift |
|
||||
|------------|------------------------------------------------------------|--------------------|
|
||||
| **v1.1.x** | iOS 7+, macOS 10.9+ | 1.1 |
|
||||
| **v1.2.x** | iOS 7+, macOS 10.9+ | 1.2 |
|
||||
| **v2.0.x** | iOS 7+, macOS 10.9+, watchOS 2+ | 2.0 |
|
||||
| **v2.1.x** | iOS 7+, macOS 10.9+, watchOS 2+ | 2.0 |
|
||||
| **v2.2.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1 |
|
||||
| **v2.3.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 2.0, 2.1, 2.2 |
|
||||
| **v2.4.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 2.2, 2.3 |
|
||||
| **v3.0.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 3.x |
|
||||
| **v3.1.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 4.0, 4.1, 4.2 |
|
||||
| **v3.2.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 4.0, 4.1, 4.2, 5.0 |
|
||||
| **v4.0.x** | iOS 8+, macOS 10.9+, watchOS 2+, tvOS 9+ | 4.0, 4.1, 4.2, 5.1 |
|
||||
| **v4.1.x** | iOS 8+, macOS 10.9+, watchOS 3+, tvOS 9+, Mac Catalyst 13+ | 4.0, 4.1, 4.2, 5.1 |
|
||||
|
||||
## Installation
|
||||
|
||||
### CocoaPods
|
||||
|
||||
KeychainAccess is available through [CocoaPods](http://cocoapods.org). To install
|
||||
it, simply add the following lines to your Podfile:
|
||||
|
||||
```ruby
|
||||
use_frameworks!
|
||||
pod 'KeychainAccess'
|
||||
```
|
||||
|
||||
### Carthage
|
||||
|
||||
KeychainAccess is available through [Carthage](https://github.com/Carthage/Carthage). To install
|
||||
it, simply add the following line to your Cartfile:
|
||||
|
||||
`github "kishikawakatsumi/KeychainAccess"`
|
||||
|
||||
### Swift Package Manager
|
||||
|
||||
KeychainAccess is also available through [Swift Package Manager](https://github.com/apple/swift-package-manager/).
|
||||
|
||||
#### Xcode
|
||||
|
||||
Select `File > Swift Packages > Add Package Dependency...`,
|
||||
|
||||
<img src="https://user-images.githubusercontent.com/40610/67627000-2833b580-f88f-11e9-89ef-18819b1a6c67.png" width="800px" />
|
||||
|
||||
#### CLI
|
||||
|
||||
First, create `Package.swift` that its package declaration includes:
|
||||
|
||||
```swift
|
||||
// swift-tools-version:5.0
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "MyLibrary",
|
||||
products: [
|
||||
.library(name: "MyLibrary", targets: ["MyLibrary"]),
|
||||
],
|
||||
dependencies: [
|
||||
.package(url: "https://github.com/kishikawakatsumi/KeychainAccess.git", from: "3.0.0"),
|
||||
],
|
||||
targets: [
|
||||
.target(name: "MyLibrary", dependencies: ["KeychainAccess"]),
|
||||
]
|
||||
)
|
||||
```
|
||||
|
||||
Then, type
|
||||
|
||||
```shell
|
||||
$ swift build
|
||||
```
|
||||
|
||||
### To manually add to your project
|
||||
|
||||
1. Add `Lib/KeychainAccess.xcodeproj` to your project
|
||||
2. Link `KeychainAccess.framework` with your target
|
||||
3. Add `Copy Files Build Phase` to include the framework to your application bundle
|
||||
|
||||
_See [iOS Example Project](https://github.com/kishikawakatsumi/KeychainAccess/tree/master/Examples/Example-iOS) as reference._
|
||||
|
||||
<img src="https://raw.githubusercontent.com/kishikawakatsumi/KeychainAccess/master/Screenshots/Installation.png" width="800px" />
|
||||
|
||||
## Author
|
||||
|
||||
kishikawa katsumi, kishikawakatsumi@mac.com
|
||||
|
||||
## License
|
||||
|
||||
KeychainAccess is available under the MIT license. See the LICENSE file for more info.
|
||||
6
SwiftProject/Pods/Manifest.lock
generated
6
SwiftProject/Pods/Manifest.lock
generated
@ -1032,6 +1032,7 @@ PODS:
|
||||
- gRPC-Core/Interface (1.62.1)
|
||||
- gRPC-Core/Privacy (1.62.1)
|
||||
- GTMSessionFetcher/Core (3.3.2)
|
||||
- KeychainAccess (4.2.2)
|
||||
- Kingfisher (7.10.2)
|
||||
- leveldb-library (1.22.4)
|
||||
- LLCycleScrollView (1.6.0):
|
||||
@ -1062,6 +1063,7 @@ DEPENDENCIES:
|
||||
- FirebaseCrashlytics
|
||||
- FirebaseFirestore
|
||||
- FirebaseRemoteConfig
|
||||
- KeychainAccess
|
||||
- LLCycleScrollView
|
||||
- SnapKit
|
||||
- SVProgressHUD
|
||||
@ -1097,6 +1099,7 @@ SPEC REPOS:
|
||||
- "gRPC-C++"
|
||||
- gRPC-Core
|
||||
- GTMSessionFetcher
|
||||
- KeychainAccess
|
||||
- Kingfisher
|
||||
- leveldb-library
|
||||
- LLCycleScrollView
|
||||
@ -1137,6 +1140,7 @@ SPEC CHECKSUMS:
|
||||
"gRPC-C++": 12f33a422dcab88dcd0c53e52cd549a929f0f244
|
||||
gRPC-Core: 6ec9002832e1e22c5bb8c54994b050b0ee4205c6
|
||||
GTMSessionFetcher: 0e876eea9782ec6462e91ab872711c357322c94f
|
||||
KeychainAccess: c0c4f7f38f6fc7bbe58f5702e25f7bd2f65abf51
|
||||
Kingfisher: 99edc495d3b7607e6425f0d6f6847b2abd6d716d
|
||||
leveldb-library: 06a69cc7582d64b29424a63e085e683cc188230a
|
||||
LLCycleScrollView: a08f666671f9fd1a205df9defebc3c217d59abc8
|
||||
@ -1148,6 +1152,6 @@ SPEC CHECKSUMS:
|
||||
SVProgressHUD: 1428aafac632c1f86f62aa4243ec12008d7a51d6
|
||||
TZImagePickerController: f1c9f1cae6ac0e30b31aaa9698f9bf4a7cf5b84f
|
||||
|
||||
PODFILE CHECKSUM: d9797551bca99266176914268501259fabf3ff32
|
||||
PODFILE CHECKSUM: 8b568f32019a8252c34f339ce9760c2954e345fc
|
||||
|
||||
COCOAPODS: 1.15.2
|
||||
|
||||
79032
SwiftProject/Pods/Pods.xcodeproj/project.pbxproj
generated
79032
SwiftProject/Pods/Pods.xcodeproj/project.pbxproj
generated
File diff suppressed because it is too large
Load Diff
58
SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/KeychainAccess.xcscheme
generated
Normal file
58
SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/KeychainAccess.xcscheme
generated
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1500"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "615C831BCE925ED486B225B87E44926D"
|
||||
BuildableName = "KeychainAccess.framework"
|
||||
BlueprintName = "KeychainAccess"
|
||||
ReferencedContainer = "container:Pods.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -199,6 +199,11 @@
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>KeychainAccess.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
<false/>
|
||||
</dict>
|
||||
<key>Kingfisher-Kingfisher.xcscheme</key>
|
||||
<dict>
|
||||
<key>isShown</key>
|
||||
|
||||
26
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-Info.plist
generated
Normal file
26
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-Info.plist
generated
Normal file
@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>${PODS_DEVELOPMENT_LANGUAGE}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>4.2.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${CURRENT_PROJECT_VERSION}</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
5
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-dummy.m
generated
Normal file
5
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-dummy.m
generated
Normal file
@ -0,0 +1,5 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
@interface PodsDummy_KeychainAccess : NSObject
|
||||
@end
|
||||
@implementation PodsDummy_KeychainAccess
|
||||
@end
|
||||
12
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-prefix.pch
generated
Normal file
12
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-prefix.pch
generated
Normal file
@ -0,0 +1,12 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
16
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-umbrella.h
generated
Normal file
16
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess-umbrella.h
generated
Normal file
@ -0,0 +1,16 @@
|
||||
#ifdef __OBJC__
|
||||
#import <UIKit/UIKit.h>
|
||||
#else
|
||||
#ifndef FOUNDATION_EXPORT
|
||||
#if defined(__cplusplus)
|
||||
#define FOUNDATION_EXPORT extern "C"
|
||||
#else
|
||||
#define FOUNDATION_EXPORT extern
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
FOUNDATION_EXPORT double KeychainAccessVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char KeychainAccessVersionString[];
|
||||
|
||||
14
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.debug.xcconfig
generated
Normal file
14
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.debug.xcconfig
generated
Normal file
@ -0,0 +1,14 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/KeychainAccess
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
6
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.modulemap
generated
Normal file
6
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.modulemap
generated
Normal file
@ -0,0 +1,6 @@
|
||||
framework module KeychainAccess {
|
||||
umbrella header "KeychainAccess-umbrella.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
14
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.release.xcconfig
generated
Normal file
14
SwiftProject/Pods/Target Support Files/KeychainAccess/KeychainAccess.release.xcconfig
generated
Normal file
@ -0,0 +1,14 @@
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
|
||||
LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE}
|
||||
PODS_ROOT = ${SRCROOT}
|
||||
PODS_TARGET_SRCROOT = ${PODS_ROOT}/KeychainAccess
|
||||
PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates
|
||||
PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
|
||||
SKIP_INSTALL = YES
|
||||
USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES
|
||||
@ -4808,6 +4808,32 @@ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
## KeychainAccess
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 kishikawa katsumi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
|
||||
|
||||
## Kingfisher
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
@ -4973,6 +4973,38 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
<key>FooterText</key>
|
||||
<string>The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 kishikawa katsumi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
</string>
|
||||
<key>License</key>
|
||||
<string>MIT</string>
|
||||
<key>Title</key>
|
||||
<string>KeychainAccess</string>
|
||||
<key>Type</key>
|
||||
<string>PSGroupSpecifier</string>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>FooterText</key>
|
||||
<string>The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2019 Wei Wang
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
|
||||
@ -21,6 +21,7 @@ ${BUILT_PRODUCTS_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||
${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework
|
||||
${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework
|
||||
${BUILT_PRODUCTS_DIR}/LLCycleScrollView/LLCycleScrollView.framework
|
||||
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||
|
||||
@ -20,6 +20,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseSharedSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LLCycleScrollView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||
|
||||
@ -21,6 +21,7 @@ ${BUILT_PRODUCTS_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework
|
||||
${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework
|
||||
${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework
|
||||
${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework
|
||||
${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework
|
||||
${BUILT_PRODUCTS_DIR}/LLCycleScrollView/LLCycleScrollView.framework
|
||||
${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework
|
||||
|
||||
@ -20,6 +20,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseSharedSwift.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/KeychainAccess.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Kingfisher.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LLCycleScrollView.framework
|
||||
${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework
|
||||
|
||||
@ -198,6 +198,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/LLCycleScrollView/LLCycleScrollView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||
@ -235,6 +236,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/KeychainAccess/KeychainAccess.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/Kingfisher/Kingfisher.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/LLCycleScrollView/LLCycleScrollView.framework"
|
||||
install_framework "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework"
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/abseil" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/abseil" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=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}/BoringSSL-GRPC/openssl_grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore/FacebookCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting/FirebaseABTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore/FirebaseFirestore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal/FirebaseFirestoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop/FirebaseRemoteConfigInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions/FirebaseSessions.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop/RecaptchaInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/abseil/absl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++/grpcpp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core/grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC/openssl_grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore/FacebookCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting/FirebaseABTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore/FirebaseFirestore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal/FirebaseFirestoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop/FirebaseRemoteConfigInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions/FirebaseSessions.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop/RecaptchaInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/abseil/absl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++/grpcpp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core/grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(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
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreTelephony" -framework "DeviceKit" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FacebookCore" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseAppCheckInterop" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreExtension" -framework "FirebaseCoreInternal" -framework "FirebaseCrashlytics" -framework "FirebaseFirestore" -framework "FirebaseFirestoreInternal" -framework "FirebaseInstallations" -framework "FirebaseRemoteConfig" -framework "FirebaseRemoteConfigInterop" -framework "FirebaseSessions" -framework "FirebaseSharedSwift" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "Photos" -framework "PhotosUI" -framework "Promises" -framework "QuartzCore" -framework "RecaptchaInterop" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "absl" -framework "grpc" -framework "grpcpp" -framework "leveldb" -framework "nanopb" -framework "openssl_grpc" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "Combine" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "FirebaseFirestoreInternal" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "SwiftUI" -weak_framework "UIKit"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreTelephony" -framework "DeviceKit" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FacebookCore" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseAppCheckInterop" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreExtension" -framework "FirebaseCoreInternal" -framework "FirebaseCrashlytics" -framework "FirebaseFirestore" -framework "FirebaseFirestoreInternal" -framework "FirebaseInstallations" -framework "FirebaseRemoteConfig" -framework "FirebaseRemoteConfigInterop" -framework "FirebaseSessions" -framework "FirebaseSharedSwift" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "KeychainAccess" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "Photos" -framework "PhotosUI" -framework "Promises" -framework "QuartzCore" -framework "RecaptchaInterop" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "absl" -framework "grpc" -framework "grpcpp" -framework "leveldb" -framework "nanopb" -framework "openssl_grpc" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "Combine" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "FirebaseFirestoreInternal" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "SwiftUI" -weak_framework "UIKit"
|
||||
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,11 @@
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/abseil" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport"
|
||||
FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController" "${PODS_CONFIGURATION_BUILD_DIR}/abseil" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb" "${PODS_ROOT}/FirebaseAnalytics/Frameworks" "${PODS_ROOT}/GoogleAppMeasurement/Frameworks" "${PODS_XCFRAMEWORKS_BUILD_DIR}/FirebaseAnalytics/WithoutAdIdSupport" "${PODS_XCFRAMEWORKS_BUILD_DIR}/GoogleAppMeasurement/WithoutAdIdSupport"
|
||||
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 $(inherited) FBSDKCOCOAPODS=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}/BoringSSL-GRPC/openssl_grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore/FacebookCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting/FirebaseABTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore/FirebaseFirestore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal/FirebaseFirestoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop/FirebaseRemoteConfigInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions/FirebaseSessions.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop/RecaptchaInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/abseil/absl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++/grpcpp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core/grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(inherited) ${PODS_ROOT}/Firebase/CoreOnly/Sources
|
||||
HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/BoringSSL-GRPC/openssl_grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/DeviceKit/DeviceKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FBSDKCoreKit/FBSDKCoreKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FacebookCore/FacebookCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseABTesting/FirebaseABTesting.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAppCheckInterop/FirebaseAppCheckInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseAuth/FirebaseAuth.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCore/FirebaseCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreExtension/FirebaseCoreExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestore/FirebaseFirestore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseFirestoreInternal/FirebaseFirestoreInternal.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseInstallations/FirebaseInstallations.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfig/FirebaseRemoteConfig.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseRemoteConfigInterop/FirebaseRemoteConfigInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSessions/FirebaseSessions.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/FirebaseSharedSwift/FirebaseSharedSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleDataTransport/GoogleDataTransport.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/GoogleUtilities/GoogleUtilities.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KeychainAccess/KeychainAccess.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/LLCycleScrollView/LLCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesObjC/FBLPromises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/PromisesSwift/Promises.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RecaptchaInterop/RecaptchaInterop.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SVProgressHUD/SVProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TZImagePickerController/TZImagePickerController.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/abseil/absl.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-C++/grpcpp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/gRPC-Core/grpc.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/leveldb-library/leveldb.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/nanopb/nanopb.framework/Headers" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Firebase" $(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
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreTelephony" -framework "DeviceKit" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FacebookCore" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseAppCheckInterop" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreExtension" -framework "FirebaseCoreInternal" -framework "FirebaseCrashlytics" -framework "FirebaseFirestore" -framework "FirebaseFirestoreInternal" -framework "FirebaseInstallations" -framework "FirebaseRemoteConfig" -framework "FirebaseRemoteConfigInterop" -framework "FirebaseSessions" -framework "FirebaseSharedSwift" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "Photos" -framework "PhotosUI" -framework "Promises" -framework "QuartzCore" -framework "RecaptchaInterop" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "absl" -framework "grpc" -framework "grpcpp" -framework "leveldb" -framework "nanopb" -framework "openssl_grpc" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "Combine" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "FirebaseFirestoreInternal" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "SwiftUI" -weak_framework "UIKit"
|
||||
OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"sqlite3" -l"stdc++" -l"z" -framework "Accelerate" -framework "Alamofire" -framework "CFNetwork" -framework "CoreTelephony" -framework "DeviceKit" -framework "FBLPromises" -framework "FBSDKCoreKit" -framework "FacebookCore" -framework "FirebaseABTesting" -framework "FirebaseAnalytics" -framework "FirebaseAppCheckInterop" -framework "FirebaseAuth" -framework "FirebaseCore" -framework "FirebaseCoreExtension" -framework "FirebaseCoreInternal" -framework "FirebaseCrashlytics" -framework "FirebaseFirestore" -framework "FirebaseFirestoreInternal" -framework "FirebaseInstallations" -framework "FirebaseRemoteConfig" -framework "FirebaseRemoteConfigInterop" -framework "FirebaseSessions" -framework "FirebaseSharedSwift" -framework "Foundation" -framework "GTMSessionFetcher" -framework "GoogleAppMeasurement" -framework "GoogleDataTransport" -framework "GoogleUtilities" -framework "KeychainAccess" -framework "Kingfisher" -framework "LLCycleScrollView" -framework "Photos" -framework "PhotosUI" -framework "Promises" -framework "QuartzCore" -framework "RecaptchaInterop" -framework "SVProgressHUD" -framework "SafariServices" -framework "Security" -framework "SnapKit" -framework "StoreKit" -framework "SystemConfiguration" -framework "TZImagePickerController" -framework "UIKit" -framework "absl" -framework "grpc" -framework "grpcpp" -framework "leveldb" -framework "nanopb" -framework "openssl_grpc" -weak_framework "Accelerate" -weak_framework "Accounts" -weak_framework "AudioToolbox" -weak_framework "Combine" -weak_framework "CoreGraphics" -weak_framework "CoreLocation" -weak_framework "FirebaseFirestoreInternal" -weak_framework "Foundation" -weak_framework "QuartzCore" -weak_framework "Security" -weak_framework "Social" -weak_framework "SwiftUI" -weak_framework "UIKit"
|
||||
OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS
|
||||
PODS_BUILD_DIR = ${BUILD_DIR}
|
||||
PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
/* Begin PBXBuildFile section */
|
||||
00290D1F2BC9125700B5244E /* remote_config_defaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 00290D1E2BC9125700B5244E /* remote_config_defaults.plist */; };
|
||||
003624662BA3F0AB0080D014 /* ZZHImageExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 003624652BA3F0AB0080D014 /* ZZHImageExtension.swift */; };
|
||||
00374AE12BC92B7C00F1F20F /* ZNetUtil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */; };
|
||||
005580782B9F1525004B9567 /* ZZHHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005580772B9F1525004B9567 /* ZZHHelper.swift */; };
|
||||
006B61C72BBA499D003FCB49 /* SKUPay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61C62BBA499D003FCB49 /* SKUPay.swift */; };
|
||||
006B61CA2BBA4B0D003FCB49 /* MembershipVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61C92BBA4B0D003FCB49 /* MembershipVC.swift */; };
|
||||
@ -116,6 +117,7 @@
|
||||
/* Begin PBXFileReference section */
|
||||
00290D1E2BC9125700B5244E /* remote_config_defaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = remote_config_defaults.plist; sourceTree = "<group>"; };
|
||||
003624652BA3F0AB0080D014 /* ZZHImageExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHImageExtension.swift; sourceTree = "<group>"; };
|
||||
00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZNetUtil.swift; sourceTree = "<group>"; };
|
||||
005580772B9F1525004B9567 /* ZZHHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZZHHelper.swift; sourceTree = "<group>"; };
|
||||
006B61C62BBA499D003FCB49 /* SKUPay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SKUPay.swift; sourceTree = "<group>"; };
|
||||
006B61C92BBA4B0D003FCB49 /* MembershipVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MembershipVC.swift; sourceTree = "<group>"; };
|
||||
@ -367,6 +369,7 @@
|
||||
1EE5C5F92B8F97BF00EDFC2F /* SpatialVideoWriter.swift */,
|
||||
005580772B9F1525004B9567 /* ZZHHelper.swift */,
|
||||
00ED6B332BA04AC200915BDE /* PlayByTransferConvertor.swift */,
|
||||
00374AE02BC92B7C00F1F20F /* ZNetUtil.swift */,
|
||||
);
|
||||
path = Util;
|
||||
sourceTree = "<group>";
|
||||
@ -851,6 +854,7 @@
|
||||
009662442BB2B93C00FCA65F /* SceneDelegate.swift in Sources */,
|
||||
AF2120AB2B4E848400400B7F /* RootNavigationController.swift in Sources */,
|
||||
AF2120C92B4E95DA00400B7F /* UIDevice+Add.swift in Sources */,
|
||||
00374AE12BC92B7C00F1F20F /* ZNetUtil.swift in Sources */,
|
||||
006B61CD2BBA4E3D003FCB49 /* UserInfo.swift in Sources */,
|
||||
AF2120AF2B4E930400400B7F /* RootManager.swift in Sources */,
|
||||
1E02C9322B8990C600DD3143 /* CCDeviceOperationListView.swift in Sources */,
|
||||
|
||||
Binary file not shown.
@ -14,8 +14,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "555"
|
||||
endingLineNumber = "555"
|
||||
startingLineNumber = "571"
|
||||
endingLineNumber = "571"
|
||||
landmarkName = "imagePickerController(_:didFinishPickingMediaWithInfo:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -30,8 +30,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "547"
|
||||
endingLineNumber = "547"
|
||||
startingLineNumber = "563"
|
||||
endingLineNumber = "563"
|
||||
landmarkName = "CCHomeController"
|
||||
landmarkType = "21">
|
||||
</BreakpointContent>
|
||||
@ -94,8 +94,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/CCHomeController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "511"
|
||||
endingLineNumber = "511"
|
||||
startingLineNumber = "527"
|
||||
endingLineNumber = "527"
|
||||
landmarkName = "gotoVideoTransformVC(url:asset:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -110,8 +110,8 @@
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/VRPhotoTransformController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "175"
|
||||
endingLineNumber = "175"
|
||||
startingLineNumber = "184"
|
||||
endingLineNumber = "184"
|
||||
landmarkName = "viewDidLoad()"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
@ -668,48 +668,16 @@
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "9C211AFB-7D3C-4FF9-8941-F85898C8CF92"
|
||||
uuid = "B6E2DD19-CC45-4EF2-94A7-8DFC039BBE5E"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/View/FeedbackView/FeedbackView.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "128"
|
||||
endingLineNumber = "128"
|
||||
landmarkName = "negativeAction(sender:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "056F3D91-99BC-416B-8689-AD6B924C7739"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/View/FeedbackView/FeedbackView.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "120"
|
||||
endingLineNumber = "120"
|
||||
landmarkName = "praiseAction(sender:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
uuid = "1326697A-63B5-4725-9055-A8FE3096779A"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "SwiftProject/Project/Controller/MenuVC/MenuVC.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "32"
|
||||
endingLineNumber = "32"
|
||||
landmarkName = "viewDidLoad()"
|
||||
startingLineNumber = "154"
|
||||
endingLineNumber = "154"
|
||||
landmarkName = "show(praiseCallback:negativeCallback:)"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
|
||||
@ -33,13 +33,13 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
|
||||
configureFireBase()
|
||||
|
||||
do {
|
||||
try AVAudioSession.sharedInstance().setActive(true)
|
||||
try AVAudioSession.sharedInstance().setCategory(.playback,options: .allowAirPlay)
|
||||
}
|
||||
catch {
|
||||
print("err: set audiosession:\(error)")
|
||||
}
|
||||
// do {
|
||||
// try AVAudioSession.sharedInstance().setActive(true)
|
||||
// try AVAudioSession.sharedInstance().setCategory(.playback,options: .allowAirPlay)
|
||||
// }
|
||||
// catch {
|
||||
// print("err: set audiosession:\(error)")
|
||||
// }
|
||||
|
||||
|
||||
SVProgressHUD.setDefaultStyle(.dark)
|
||||
@ -49,6 +49,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
func configureFireBase() {
|
||||
FirebaseApp.configure()
|
||||
remoteConfig = FirebaseRemoteConfig.RemoteConfig.remoteConfig()
|
||||
|
||||
@ -16,6 +16,7 @@ class UserInfo: NSObject {
|
||||
var paymentProductIdentifier:String? //表示已购买的产品id
|
||||
var isMemberShip:Bool {
|
||||
get {
|
||||
return true
|
||||
return paymentState
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,8 @@
|
||||
import UIKit
|
||||
import AVKit
|
||||
import AVFoundation
|
||||
|
||||
import Firebase
|
||||
import FirebaseCore
|
||||
class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
var window: UIWindow?
|
||||
@ -37,12 +38,19 @@ class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
// Release any resources associated with this scene that can be re-created the next time the scene connects.
|
||||
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||
print("ExternalSceneDelegate sceneDidDisconnect")
|
||||
Analytics.logEvent("equipment_disconnect", parameters: nil)
|
||||
FeedbackView.show {//好评
|
||||
|
||||
} negativeCallback: {//差评
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||
// Called when the scene has moved from an inactive state to an active state.
|
||||
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||
print("ExternalSceneDelegate sceneDidBecomeActive")
|
||||
Analytics.logEvent("equipment_connect", parameters: nil)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@ import TZImagePickerController
|
||||
import MessageUI
|
||||
import SVProgressHUD
|
||||
import Firebase
|
||||
import AdSupport
|
||||
class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeViewControllerDelegate {
|
||||
|
||||
|
||||
@ -70,6 +71,8 @@ class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeV
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
uploadAppInfo()
|
||||
|
||||
ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_Home)
|
||||
self.view.backgroundColor = UIColor.black
|
||||
self.navLine?.isHidden = true
|
||||
@ -142,6 +145,19 @@ class CCHomeController: BaseController, LLCycleScrollViewDelegate,MFMailComposeV
|
||||
Analytics.logEvent("home_pv", parameters: ["refer_page":"首页","duration":sec])
|
||||
}
|
||||
|
||||
//MARK: - 公司的平台---上报应用数据
|
||||
func uploadAppInfo() {
|
||||
ZNetUtil.postUrl(urlStr: ZNetUtil.kUploadAppInfoUrl, params: ["eventName":"app_open"]) { result, error in
|
||||
print("上报回调...")
|
||||
}
|
||||
|
||||
if ZZHHelper.checkAppIsFirstlanuch() {
|
||||
ZNetUtil.postUrl(urlStr: ZNetUtil.kUploadAppInfoUrl, params: ["eventName":"first_open"]) { result, error in
|
||||
print("上报回调...")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//MARK: - 监听设备投流
|
||||
@objc private func airPlayStatusDidChange(_ notification: Notification) {
|
||||
checkAirPlayStatus()
|
||||
|
||||
@ -55,6 +55,11 @@ class MembershipVC: BaseController {
|
||||
psubscribeBtn?.isEnabled = false
|
||||
}
|
||||
|
||||
FeedbackView.show {//好评
|
||||
|
||||
} negativeCallback: {//差评
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -36,18 +36,27 @@ class VRPhotoTransformController: BaseController {
|
||||
|
||||
lazy var progressView:CCTransformProgressPopView? = {
|
||||
let pv = CCTransformProgressPopView.init(frame: view.bounds)
|
||||
pv.closeActionBlock = { [weak self] in
|
||||
pv.closeActionBlock = { [weak self] in//返回首页
|
||||
self?.navigationController?.popToRootViewController(animated: true)
|
||||
pv.removeFromSuperview()
|
||||
Analytics.logEvent("result_back_click", parameters: nil)
|
||||
}
|
||||
pv.transformActionBlock = {
|
||||
pv.transformActionBlock = {//继续转码
|
||||
pv.isHidden = true
|
||||
Analytics.logEvent("result_continue_click", parameters: nil)
|
||||
FeedbackView.show {//好评
|
||||
|
||||
} negativeCallback: {//差评
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return pv
|
||||
}()
|
||||
|
||||
//显示进度条
|
||||
func showProgress() {
|
||||
Analytics.logEvent("process_pv", parameters: nil)
|
||||
if self.progressView?.superview == nil {
|
||||
self.view.addSubview(self.progressView!)
|
||||
}
|
||||
@ -253,6 +262,7 @@ class VRPhotoTransformController: BaseController {
|
||||
showProgress()
|
||||
DispatchQueue.main.async {
|
||||
self.progressView?.updateProgress(value: 1)
|
||||
Analytics.logEvent("result_pv", parameters: nil)
|
||||
}
|
||||
|
||||
//空间图片才能进行3D格式的转换,普通图片没有这些参数
|
||||
@ -292,6 +302,7 @@ class VRPhotoTransformController: BaseController {
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
|
||||
self.progressView?.updateProgress(value: 1)
|
||||
self.progressView?.updateInfo(title: NSLocalizedString("转码完成", comment: ""), desc: NSLocalizedString("导出内容已存储到相册中", comment: ""))
|
||||
}
|
||||
|
||||
@ -63,12 +63,19 @@ class VRVideoTransformController: BaseController {
|
||||
var mBottomBtn:UIButton?
|
||||
lazy var progressView:CCTransformProgressPopView? = {
|
||||
let pv = CCTransformProgressPopView.init(frame: view.bounds)
|
||||
pv.closeActionBlock = { [weak self] in
|
||||
pv.closeActionBlock = { [weak self] in//返回首页
|
||||
self?.navigationController?.popToRootViewController(animated: true)
|
||||
pv.removeFromSuperview()
|
||||
Analytics.logEvent("result_back_click", parameters: nil)
|
||||
}
|
||||
pv.transformActionBlock = {
|
||||
pv.transformActionBlock = {//继续转码
|
||||
pv.isHidden = true
|
||||
Analytics.logEvent("result_continue_click", parameters: nil)
|
||||
FeedbackView.show {//好评
|
||||
|
||||
} negativeCallback: {//差评
|
||||
|
||||
}
|
||||
}
|
||||
return pv
|
||||
}()
|
||||
@ -93,6 +100,7 @@ class VRVideoTransformController: BaseController {
|
||||
|
||||
//显示进度条
|
||||
func showProgress() {
|
||||
Analytics.logEvent("process_pv", parameters: nil)
|
||||
if self.progressView?.superview == nil {
|
||||
self.view.addSubview(self.progressView!)
|
||||
}
|
||||
@ -854,6 +862,7 @@ extension VRVideoTransformController {
|
||||
|
||||
writer.add(writerInput)
|
||||
DispatchQueue.main.async {
|
||||
Analytics.logEvent("result_pv", parameters: nil)
|
||||
self.progressView?.updateProgress(value: 1)
|
||||
}
|
||||
|
||||
|
||||
83
SwiftProject/SwiftProject/Project/Util/ZNetUtil.swift
Normal file
83
SwiftProject/SwiftProject/Project/Util/ZNetUtil.swift
Normal file
@ -0,0 +1,83 @@
|
||||
//
|
||||
// ZNetUtil.swift
|
||||
// SwiftProject
|
||||
//
|
||||
// Created by aaa on 2024/4/12.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import AdSupport
|
||||
import DeviceKit
|
||||
class ZNetUtil: NSObject {
|
||||
// 新建项目默认已配置DEBUG,可以用BEBUG来判断
|
||||
#if DEBUG
|
||||
static let hostUrl = "https://openapi.lux-ad.com"
|
||||
#else
|
||||
static let hostUrl = "https://openapi.lux-ad.com"
|
||||
#endif
|
||||
|
||||
|
||||
//上报app信息
|
||||
static let kUploadAppInfoUrl:String = hostUrl + "/statistic/appdatacollection/saveAppData"
|
||||
|
||||
//用户反馈 参数: catalog 问题标题 remark 问题描述 contact 联系方式
|
||||
static let kUserFeedbackUrl:String = hostUrl + "/app/common/createFeedback"
|
||||
|
||||
class func postUrl(urlStr:String,params:[String:Any], callback:@escaping (_ result:[String:Any]?, _ error:Error?)->Void){
|
||||
let url = URL(string: urlStr)
|
||||
guard let url else {
|
||||
return
|
||||
}
|
||||
var request = URLRequest(url: url)
|
||||
request.httpMethod = "POST"
|
||||
let comParams = getComParams()
|
||||
let nparams = params.merging(comParams) { va, ke in
|
||||
|
||||
}
|
||||
let bodyData = try? JSONSerialization.data(withJSONObject: nparams, options: [])
|
||||
request.httpBody = bodyData
|
||||
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
||||
let dataTask = URLSession.shared.dataTask(with: request) { data, response, error in
|
||||
if let error = error {
|
||||
print("Error:", error)
|
||||
callback(nil,error)
|
||||
return
|
||||
}
|
||||
|
||||
guard let data = data, let response = response as? HTTPURLResponse else {
|
||||
print("Invalid response")
|
||||
callback(nil,nil)
|
||||
return
|
||||
}
|
||||
let result = try? JSONSerialization.jsonObject(with: data) as? [String:Any]
|
||||
callback(result,nil)
|
||||
}
|
||||
dataTask.resume()
|
||||
}
|
||||
|
||||
//返回通用参数
|
||||
class func getComParams()->[String:Any] {
|
||||
let infoDictionary: Dictionary = Bundle.main.infoDictionary!
|
||||
|
||||
let userId = UIDevice.current.identifierForVendor?.uuidString ?? "unknow_userid"
|
||||
let ad_id = ASIdentifierManager.shared().advertisingIdentifier.uuidString
|
||||
let uuid = ZZHHelper.getUUID()
|
||||
let device = UIDevice.current.phoneModel
|
||||
let appVersion = infoDictionary["CFBundleShortVersionString"] as! String
|
||||
let language = ZZHHelper.getCurrentLanguage()
|
||||
let pkgName = Bundle.main.bundleIdentifier ?? "com.nsk.tdvideo"
|
||||
let country = ZZHHelper.getCurrentRegion()
|
||||
let timestamp = Date.now.timeIntervalSince1970
|
||||
let params = ["userId":userId,
|
||||
"ad_id":ad_id,
|
||||
"uuid":uuid,
|
||||
"device":device,
|
||||
"appVersion":appVersion,
|
||||
"language":language,
|
||||
"channel":"ios",
|
||||
"pkgName":pkgName,
|
||||
"country":country,
|
||||
"timestamp":timestamp] as [String : Any]
|
||||
return params
|
||||
}
|
||||
}
|
||||
@ -8,8 +8,13 @@
|
||||
import Foundation
|
||||
import AVFoundation
|
||||
|
||||
|
||||
import KeychainAccess
|
||||
class ZZHHelper {
|
||||
|
||||
static let KEYCHAIN_SERVICE:String = "com.nsk.tdvideo" // 需要项目唯一性,建议使用项目的 bundleId
|
||||
static let UUID_KEY:String = "VPro_UUID_KEY"
|
||||
|
||||
|
||||
class func formatVideoTime(second:Int) -> String {
|
||||
let allTime: Int = second
|
||||
var hours = 0
|
||||
@ -87,4 +92,137 @@ class ZZHHelper {
|
||||
}
|
||||
return verStr
|
||||
}
|
||||
|
||||
class func getUUID() -> String{
|
||||
let keychain = Keychain(service: ZZHHelper.KEYCHAIN_SERVICE)
|
||||
var uuid:String = ""
|
||||
do {
|
||||
uuid = try keychain.get(ZZHHelper.UUID_KEY) ?? ""
|
||||
}
|
||||
catch let error {
|
||||
print(error)
|
||||
}
|
||||
print("拉取的设备: \(uuid)")
|
||||
if uuid.isEmpty {
|
||||
uuid = UUID().uuidString
|
||||
do {
|
||||
try keychain.set(uuid, key: ZZHHelper.UUID_KEY)
|
||||
}
|
||||
catch let error {
|
||||
print(error)
|
||||
uuid = ""
|
||||
}
|
||||
}
|
||||
return uuid
|
||||
}
|
||||
|
||||
class func getCurrentLanguage() -> String {
|
||||
// 返回设备曾使用过的语言列表
|
||||
let languages: [String] = UserDefaults.standard.object(forKey: "AppleLanguages") as! [String]
|
||||
// 当前使用的语言排在第一
|
||||
let currentLanguage = languages.first
|
||||
return currentLanguage ?? "en-CN"
|
||||
}
|
||||
|
||||
/// 获取系统当前地区 en_CN/en_GB
|
||||
class func getCurrentRegion() -> String {
|
||||
return NSLocale.current.identifier
|
||||
}
|
||||
|
||||
//判断是否为用户首次启动
|
||||
class func checkAppIsFirstlanuch()->Bool {
|
||||
let firstLanuch = UserDefaults.standard.bool(forKey: "kisNotUserFirstLanuchKey")
|
||||
UserDefaults.standard.setValue(true, forKey: "kisNotUserFirstLanuchKey")
|
||||
UserDefaults.standard.synchronize()
|
||||
return !firstLanuch
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public extension UIDevice {
|
||||
|
||||
var phoneModel: String {
|
||||
var systemInfo = utsname()
|
||||
uname(&systemInfo)
|
||||
let machineMirror = Mirror(reflecting: systemInfo.machine)
|
||||
let identifier = machineMirror.children.reduce("") { identifier, element in
|
||||
guard let value = element.value as? Int8 , value != 0 else { return identifier }
|
||||
return identifier + String(UnicodeScalar(UInt8(value)))
|
||||
}
|
||||
|
||||
switch identifier {
|
||||
case "iPod5,1": return "iPod Touch 5"
|
||||
case "iPod7,1": return "iPod Touch 6"
|
||||
case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4"
|
||||
case "iPhone4,1": return "iPhone 4s"
|
||||
case "iPhone5,1", "iPhone5,2": return "iPhone 5"
|
||||
case "iPhone5,3", "iPhone5,4": return "iPhone 5c"
|
||||
case "iPhone6,1", "iPhone6,2": return "iPhone 5s"
|
||||
case "iPhone7,2": return "iPhone 6"
|
||||
case "iPhone7,1": return "iPhone 6 Plus"
|
||||
case "iPhone8,1": return "iPhone 6s"
|
||||
case "iPhone8,2": return "iPhone 6s Plus"
|
||||
case "iPhone8,4": return "iPhone SE (1st generation)"
|
||||
case "iPhone9,1", "iPhone9,3": return "iPhone 7"
|
||||
case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus"
|
||||
case "iPhone10,1", "iPhone10,4": return "iPhone 8"
|
||||
case "iPhone10,5", "iPhone10,2": return "iPhone 8 Plus"
|
||||
case "iPhone10,3", "iPhone10,6": return "iPhone X"
|
||||
case "iPhone11,2": return "iPhone XS"
|
||||
case "iPhone11,4", "iPhone11,6": return "iPhone XS MAX"
|
||||
case "iPhone11,8": return "iPhone XR"
|
||||
case "iPhone12,1": return "iPhone 11"
|
||||
case "iPhone12,3": return "iPhone 11 pro"
|
||||
case "iPhone12,5": return "iPhone 11 Pro Max"
|
||||
case "iPhone12,8": return "iPhone SE (2nd generation)"
|
||||
case "iPhone13,1": return "iPhone 12 mini"
|
||||
case "iPhone13,2": return "iPhone 12"
|
||||
case "iPhone13,3": return "iPhone 12 Pro"
|
||||
case "iPhone13,4": return "iPhone 12 Pro Max"
|
||||
case "iPhone14,4": return "iPhone 13 mini"
|
||||
case "iPhone14,5": return "iPhone 13"
|
||||
case "iPhone14,2": return "iPhone 13 Pro"
|
||||
case "iPhone14,3": return "iPhone 13 Pro Max"
|
||||
case "iPhone14,6": return "iPhone SE (3rd generation)"
|
||||
case "iPhone14,7": return "iPhone 14"
|
||||
case "iPhone14,8": return "iPhone 14 Plus"
|
||||
case "iPhone15,2": return "iPhone 14 Pro"
|
||||
case "iPhone15,3": return "iPhone 14 Pro Max"
|
||||
case "iPhone15,4": return "iPhone 15"
|
||||
case "iPhone15,5": return "iPhone 15 Plus"
|
||||
case "iPhone16,1": return "iPhone 15 Pro"
|
||||
case "iPhone16,2": return "iPhone 15 Pro Max"
|
||||
|
||||
|
||||
case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2"
|
||||
case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3"
|
||||
case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4"
|
||||
case "iPad6,11", "iPad6,12": return "iPad 5"
|
||||
case "iPad7,5", "iPad7,6": return "iPad 6"
|
||||
case "iPad7,11", "iPad7,12": return "iPad 7"
|
||||
case "iPad11,6", "iPad11,7": return "iPad 8"
|
||||
case "iPad12,1", "iPad12,2": return "iPad 9"
|
||||
|
||||
case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air"
|
||||
case "iPad5,3", "iPad5,4": return "iPad Air 2"
|
||||
case "iPad11,3", "iPad11,4": return "iPad Air 3"
|
||||
case "iPad13,1", "iPad13,2": return "iPad Air 4"
|
||||
case "iPad13,16", "iPad13,17": return "iPad Air 5"
|
||||
|
||||
case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini"
|
||||
case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad Mini 2"
|
||||
case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad Mini 3"
|
||||
case "iPad5,1", "iPad5,2": return "iPad Mini 4"
|
||||
case "iPad11,1", "iPad11,2": return "iPad Mini 5"
|
||||
case "iPad14,1", "iPad14,2": return "iPad Mini 6"
|
||||
case "iPad6,7", "iPad6,8", "iPad6,3", "iPad6,4", "iPad7,1", "iPad7,2", "iPad7,3", "iPad7,4", "iPad8,1", "iPad8,2", "iPad8,3", "iPad8,4", "iPad8,5", "iPad8,6", "iPad8,7", "iPad8,8", "iPad8,9", "iPad8,10", "iPad8,11", "iPad8,12": return "iPad Pro"
|
||||
case "AppleTV5,3": return "Apple TV"
|
||||
case "i386", "x86_64": return "Simulator"
|
||||
default: return identifier
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
import StoreKit
|
||||
class FeedbackView: UIView {
|
||||
var scenterBgView:UIView?
|
||||
var alphaBgView:UIView?
|
||||
@ -122,6 +123,10 @@ class FeedbackView: UIView {
|
||||
return
|
||||
}
|
||||
praiseCallback()
|
||||
guard let kw = KWindow else {
|
||||
return
|
||||
}
|
||||
SKStoreReviewController.requestReview(in: kw.windowScene!)
|
||||
}
|
||||
|
||||
@objc func negativeAction(sender:UIButton) {
|
||||
@ -145,6 +150,12 @@ class FeedbackView: UIView {
|
||||
}
|
||||
|
||||
class func show(praiseCallback:@escaping ()->Void,negativeCallback:@escaping ()->Void) {
|
||||
let hasShowFeedback = UserDefaults.standard.bool(forKey: "khasShowFeedbackKey")
|
||||
|
||||
if hasShowFeedback {
|
||||
return
|
||||
}
|
||||
|
||||
let fbView = FeedbackView(frame: .zero)
|
||||
fbView.praiseCallback = praiseCallback
|
||||
fbView.negativeCallback = negativeCallback
|
||||
@ -156,6 +167,8 @@ class FeedbackView: UIView {
|
||||
}
|
||||
KWindow?.layoutIfNeeded()
|
||||
fbView.show()
|
||||
UserDefaults.standard.set(true, forKey: "khasShowFeedbackKey")
|
||||
UserDefaults.standard.synchronize()
|
||||
}
|
||||
|
||||
@objc func hiddenSelf() {
|
||||
|
||||
@ -25,12 +25,14 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
// Release any resources associated with this scene that can be re-created the next time the scene connects.
|
||||
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
|
||||
print("sceneDidDisconnect")
|
||||
|
||||
}
|
||||
|
||||
func sceneDidBecomeActive(_ scene: UIScene) {
|
||||
// Called when the scene has moved from an inactive state to an active state.
|
||||
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||
print("sceneDidBecomeActive")
|
||||
|
||||
}
|
||||
|
||||
func sceneWillResignActive(_ scene: UIScene) {
|
||||
|
||||
@ -3,6 +3,6 @@
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>menuParams</key>
|
||||
<string>{"contactConfig":{"default":[{"icon":"xxxxxx","title":"wecht","url":""},{"icon":"xxxxxx","title":"wecht","url":""}],"zh":[{"icon":"xxxxxx","title":"wecht","url":"ffff"},{"icon":"xxxxxx","title":"wecht","url":"xxx"}]}}</string>
|
||||
<string>{"contactConfig":{"default":[{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/wechat.png","title":"WeChat","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/tencent.png","title":"Tencent QQ","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/email.png","title":"Email","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/telegram.png","title":"Telegram","url":"mailto://fangaoqdi@163.com"}],"zh":[{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/wechat.png","title":"WeChat","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/tencent.png","title":"Tencent QQ","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/email.png","title":"Email","url":"mailto://fangaoqdi@163.com"},{"icon":"https://resource-sg-public.obs.ap-southeast-3.myhuaweicloud.com/vpcamera/telegram.png","title":"Telegram","url":"mailto://fangaoqdi@163.com"}]}}</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Loading…
Reference in New Issue
Block a user