Added: xcprivacy files #25
|
|
@ -1,5 +1,13 @@
|
|||
# Changelog
|
||||
|
||||
### 1.54.6
|
||||
|
||||
- **Added**: `xcprivacy` files
|
||||
- **Update**: Correctly detect app reinstall in `AppInstallLifetimeSingleValueStorage`
|
||||
- **Update**: use `xHeight` instead of `pointSize` for default skeleton line height calculation
|
||||
- **Update**: update `linkTextAttributes` in `UITextView` when setting interactive url parts
|
||||
|
||||
|
||||
### 1.54.5
|
||||
|
||||
- **Update**: Сhange `StatefulButton` event propogation avoidance method.
|
||||
|
|
|
|||
|
|
@ -107,6 +107,9 @@ let package = Package(
|
|||
dependencies: ["TISwiftUtils", "TILogging"],
|
||||
path: "TIFoundationUtils",
|
||||
exclude: ["TIFoundationUtils.app"],
|
||||
resources: [
|
||||
.copy("PrivacyInfo.xcprivacy"),
|
||||
],
|
||||
plugins: [.plugin(name: "TISwiftLintPlugin")]),
|
||||
|
||||
.target(name: "TICoreGraphicsUtils",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIAppleMapUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for map objects clustering and interacting using Apple MapKit.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIApplication'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Application architecture.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIAuth'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Login, registration, confirmation and other related actions'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIBottomSheet'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Base models for creating bottom sheet view controllers'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TICoreGraphicsUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'CoreGraphics drawing helpers'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIDeeplink'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Deeplink service API'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIDeveloperUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Universal web view API'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIEcommerce'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Cart, products, promocodes, bonuses and other related actions'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -35,4 +35,12 @@ open class BaseSingleValueDefaultsStorage<ValueType>: BaseSingleValueStorage<Val
|
|||
getValueClosure: getValueClosure,
|
||||
storeValueClosure: storeValueClosure)
|
||||
}
|
||||
|
||||
open override func getValue() -> Result<ValueType, StorageError> {
|
||||
guard hasStoredValue() else {
|
||||
return .failure(.valueNotFound)
|
||||
}
|
||||
|
||||
return super.getValue()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,10 +23,21 @@
|
|||
import Foundation
|
||||
|
||||
open class BoolValueDefaultsStorage: BaseSingleValueDefaultsStorage<Bool> {
|
||||
public init(defaults: UserDefaults, storageKey: StorageKey<Bool>) {
|
||||
public var defaultValue: Bool
|
||||
|
||||
public init(defaults: UserDefaults,
|
||||
storageKey: StorageKey<Bool>,
|
||||
defaultValue: Bool = false) {
|
||||
|
||||
self.defaultValue = defaultValue
|
||||
|
||||
super.init(defaults: defaults,
|
||||
storageKey: storageKey,
|
||||
getValueClosure: { .success($0.bool(forKey: $1.rawValue)) },
|
||||
storeValueClosure: { .success($0.set($1, forKey: $2.rawValue)) })
|
||||
}
|
||||
|
||||
open override func getValue() -> Result<Bool, StorageError> {
|
||||
hasStoredValue() ? super.getValue() : .success(defaultValue)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,9 +84,7 @@ where SourceStorage.ErrorType == TargetStorage.ErrorType,
|
|||
return .success(())
|
||||
|
||||
case let (.success, .failure(error)):
|
||||
logErrorIfNeeded(error, file: #file, line: #line)
|
||||
|
||||
return .success(())
|
||||
return .failure(error)
|
||||
|
||||
case let (.failure(error), .success):
|
||||
return .failure(error)
|
||||
|
|
|
|||
|
|
@ -40,25 +40,23 @@ where Storage.ErrorType == StorageError,
|
|||
// MARK: - SingleValueStorage
|
||||
|
||||
open func hasStoredValue() -> Bool {
|
||||
let hasStoredValueResult = appFirstRunCheckStorage.getValue()
|
||||
.flatMap { .success($0 ? false : wrappedStorage.hasStoredValue()) }
|
||||
guard appFirstRunCheckStorage.hasStoredValue() else {
|
||||
return false
|
||||
}
|
||||
|
||||
return (try? hasStoredValueResult.get()) ?? false
|
||||
return wrappedStorage.hasStoredValue()
|
||||
}
|
||||
|
||||
open func getValue() -> Result<Storage.ValueType, Storage.ErrorType> {
|
||||
appFirstRunCheckStorage.getValue()
|
||||
.flatMap {
|
||||
guard $0 else {
|
||||
return wrappedStorage.getValue()
|
||||
guard hasStoredValue() else {
|
||||
return deleteValue()
|
||||
.flatMap {
|
||||
appFirstRunCheckStorage.store(value: false)
|
||||
}
|
||||
.flatMap { .failure(.valueNotFound) }
|
||||
}
|
||||
|
||||
return wrappedStorage.deleteValue()
|
||||
.flatMap {
|
||||
appFirstRunCheckStorage.store(value: false)
|
||||
}
|
||||
.flatMap { .failure(.valueNotFound) }
|
||||
}
|
||||
return wrappedStorage.getValue()
|
||||
}
|
||||
|
||||
open func store(value: Storage.ValueType) -> Result<Void, Storage.ErrorType> {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<?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>NSPrivacyAccessedAPITypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSPrivacyAccessedAPIType</key>
|
||||
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
|
||||
<key>NSPrivacyAccessedAPITypeReasons</key>
|
||||
<array>
|
||||
<string>C56D.1</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIFoundationUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for Foundation framework classes.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
@ -14,9 +14,11 @@ Pod::Spec.new do |s|
|
|||
if ENV["DEVELOPMENT_INSTALL"] # installing using :path =>
|
||||
s.source_files = sources
|
||||
s.exclude_files = s.name + '.app'
|
||||
s.resources = '*.{xcprivacy}'
|
||||
else
|
||||
s.source_files = s.name + '/' + sources
|
||||
s.exclude_files = s.name + '/*.app', '**/NefPlaygroundSupport.swift'
|
||||
s.resources = s.name + '/*.{xcprivacy}'
|
||||
end
|
||||
|
||||
s.dependency 'TILogging', s.version.to_s
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIGoogleMapUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for map objects clustering and interacting using Google Maps SDK.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIKeychainUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for Keychain classes.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TILogging'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Logging for TI libraries.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIMapUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for map objects clustering and interacting.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIMoyaNetworking'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Moya + Swagger network service.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TINetworking'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Swagger-frendly networking layer helpers.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TINetworkingCache'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Caching results of EndpointRequests.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIPagination'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Generic pagination component.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TISwiftUICore'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Core UI elements: protocols, views and helpers.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TISwiftUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Bunch of useful helpers for Swift development.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TITableKitUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for TableKit classes.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TITextProcessing'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'A text processing service helping to get a text mask and a placeholder from incoming regex.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ open class TextSkeletonsConfiguration: BaseViewSkeletonsConfiguration {
|
|||
|
||||
open func calculateLineHeight(for font: UIFont) -> CGFloat {
|
||||
// By default height of the line is equal to 75% of font's size
|
||||
font.pointSize * 0.75
|
||||
font.xHeight * 0.75
|
||||
}
|
||||
|
||||
open func calculateLineSpacing(for font: UIFont) -> CGFloat {
|
||||
|
|
|
|||
|
|
@ -63,5 +63,6 @@ public extension UITextView {
|
|||
}
|
||||
|
||||
attributedText = mutableAttributedText
|
||||
linkTextAttributes = interactivePartsStyle.attributedStringAttributes
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIUIElements'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Bunch of useful protocols and views.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIUIKitCore'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Core UI elements: protocols, views and helpers.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIWebView'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Universal web view API'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
Pod::Spec.new do |s|
|
||||
s.name = 'TIYandexMapUtils'
|
||||
s.version = '1.54.5'
|
||||
s.version = '1.54.6'
|
||||
s.summary = 'Set of helpers for map objects clustering and interacting using Yandex Maps SDK.'
|
||||
s.homepage = 'https://git.svc.touchin.ru/TouchInstinct/LeadKit/src/tag/' + s.version.to_s + '/' + s.name
|
||||
s.license = { :type => 'MIT', :file => 'LICENSE' }
|
||||
|
|
|
|||
Loading…
Reference in New Issue