SwiftGen Assets
This commit is contained in:
parent
9004a124cd
commit
2f66bb5cd7
|
@ -1,3 +1,5 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
- Added Code Review Guides, Changelog, pull request and issue templates, SwiftLint Rules
|
- Added SwiftGen templates for generating asset helper files.
|
||||||
|
|
||||||
|
- Added Code Review Guides, Changelog, pull request and issue templates, SwiftLint Rules
|
||||||
|
|
|
@ -36,6 +36,8 @@ note: z means sapling shielded addresses.
|
||||||
|
|
||||||
Contributions are very much welcomed! Please read our [Contributing Guidelines](/CONTRIBUTING.md) and [Code of Conduct](/CONDUCT.md). Our backlog has many Issues tagged with the `good first issue` label. Please fork the repo and make a pull request for us to review.
|
Contributions are very much welcomed! Please read our [Contributing Guidelines](/CONTRIBUTING.md) and [Code of Conduct](/CONDUCT.md). Our backlog has many Issues tagged with the `good first issue` label. Please fork the repo and make a pull request for us to review.
|
||||||
|
|
||||||
|
Secant Wallet uses [SwiftLint](https://github.com/realm/SwiftLint) and [SwiftGen](https://github.com/SwiftGen/SwiftGen) to conform to our coding guidelines for source code and generate accessors for assets. Please install these locally when contributing to the project, they are run automatically when you build.
|
||||||
|
|
||||||
# Reporting an issue
|
# Reporting an issue
|
||||||
|
|
||||||
If you wish to report a security issue, please follow our [Responsible Disclosure guidelines](https://github.com/zcash/ZcashLightClientKit/blob/master/responsible_disclosure.md).
|
If you wish to report a security issue, please follow our [Responsible Disclosure guidelines](https://github.com/zcash/ZcashLightClientKit/blob/master/responsible_disclosure.md).
|
||||||
|
@ -44,4 +46,4 @@ If you wish to report a security issue, please follow our [Responsible Disclosur
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
MIT
|
MIT
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
// swiftlint:disable all
|
||||||
|
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
|
||||||
|
|
||||||
|
{% if families %}
|
||||||
|
{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
|
||||||
|
{% set fontType %}{{param.fontTypeName|default:"FontConvertible"}}{% endset %}
|
||||||
|
{% set fontAlias %}{{param.fontAliasName|default:"SystemFont"}}{% endset %}
|
||||||
|
import SwiftUI
|
||||||
|
#if os(OSX)
|
||||||
|
import AppKit.NSFont
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
import UIKit.UIFont
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Deprecated typealiases
|
||||||
|
@available(*, deprecated, renamed: "{{fontType}}.Font", message: "This typealias will be removed in SwiftGen 7.0")
|
||||||
|
{{accessModifier}} typealias {{fontAlias}} = {{fontType}}.{{fontAlias}}
|
||||||
|
|
||||||
|
// swiftlint:disable superfluous_disable_command
|
||||||
|
// swiftlint:disable file_length
|
||||||
|
|
||||||
|
// MARK: - Fonts
|
||||||
|
|
||||||
|
// swiftlint:disable identifier_name line_length type_body_length
|
||||||
|
{% macro transformPath path %}{% filter removeNewlines %}
|
||||||
|
{% if param.preservePath %}
|
||||||
|
{{path}}
|
||||||
|
{% else %}
|
||||||
|
{{path|basename}}
|
||||||
|
{% endif %}
|
||||||
|
{% endfilter %}{% endmacro %}
|
||||||
|
{{accessModifier}} enum {{param.enumName|default:"FontFamily"}} {
|
||||||
|
{% for family in families %}
|
||||||
|
{% set identifierName %}{{family.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{% endset %}
|
||||||
|
{{accessModifier}} enum {{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
|
||||||
|
{% for font in family.fonts %}
|
||||||
|
|
||||||
|
{{accessModifier}} static let {{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{fontType}}(name: "{{font.name}}", family: "{{family.name}}", path: "{% call transformPath font.path %}")
|
||||||
|
{% endfor %}
|
||||||
|
{{accessModifier}} static let all: [{{fontType}}] = [{% for font in family.fonts %}{{font.style|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}}{{ ", " if not forloop.last }}{% endfor %}]
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{{accessModifier}} static let allCustomFonts: [{{fontType}}] = [{% for family in families %}{{family.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.all{{ ", " if not forloop.last }}{% endfor %}].flatMap { $0 }
|
||||||
|
{{accessModifier}} static func registerAllCustomFonts() {
|
||||||
|
allCustomFonts.forEach { $0.register() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// swiftlint:enable identifier_name line_length type_body_length
|
||||||
|
|
||||||
|
// MARK: - Implementation Details
|
||||||
|
|
||||||
|
{{accessModifier}} struct {{fontType}} {
|
||||||
|
{{accessModifier}} let name: String
|
||||||
|
{{accessModifier}} let family: String
|
||||||
|
{{accessModifier}} let path: String
|
||||||
|
|
||||||
|
#if os(OSX)
|
||||||
|
{{accessModifier}} typealias {{fontAlias}} = NSFont
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
{{accessModifier}} typealias {{fontAlias}} = UIFont
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{{accessModifier}} func font(size: CGFloat) -> {{fontAlias}} {
|
||||||
|
guard let font = {{fontAlias}}(font: self, size: size) else {
|
||||||
|
fatalError("Unable to initialize font '\(name)' (\(family))")
|
||||||
|
}
|
||||||
|
return font
|
||||||
|
}
|
||||||
|
|
||||||
|
{{accessModifier}} func textStyle(_ textStyle: Font.TextStyle) -> Font {
|
||||||
|
Font.mappedFont(name, textStyle: textStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
{{accessModifier}} func register() {
|
||||||
|
// swiftlint:disable:next conditional_returns_on_newline
|
||||||
|
guard let url = url else { return }
|
||||||
|
CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate var url: URL? {
|
||||||
|
// swiftlint:disable:next implicit_return
|
||||||
|
{% if param.lookupFunction %}
|
||||||
|
return {{param.lookupFunction}}(name, family, path)
|
||||||
|
{% else %}
|
||||||
|
return {{param.bundle|default:"BundleToken.bundle"}}.url(forResource: path, withExtension: nil)
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{accessModifier}} extension {{fontType}}.{{fontAlias}} {
|
||||||
|
convenience init?(font: {{fontType}}, size: CGFloat) {
|
||||||
|
#if os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
|
||||||
|
font.register()
|
||||||
|
}
|
||||||
|
#elseif os(OSX)
|
||||||
|
if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
|
||||||
|
font.register()
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
self.init(name: font.name, size: size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% if not param.bundle and not param.lookupFunction %}
|
||||||
|
|
||||||
|
// swiftlint:disable convenience_type
|
||||||
|
private final class BundleToken {
|
||||||
|
static let bundle: Bundle = {
|
||||||
|
#if SWIFT_PACKAGE
|
||||||
|
return Bundle.module
|
||||||
|
#else
|
||||||
|
return Bundle(for: BundleToken.self)
|
||||||
|
#endif
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate extension Font {
|
||||||
|
static func mappedFont(_ name: String, textStyle: TextStyle) -> Font {
|
||||||
|
let fontSize = UIFont.preferredFont(forTextStyle: self.mapToUIFontTextStyle(textStyle)).pointSize
|
||||||
|
return Font.custom(name, size: fontSize, relativeTo: textStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable:next cyclomatic_complexity
|
||||||
|
static func mapToUIFontTextStyle(_ textStyle: SwiftUI.Font.TextStyle) -> UIFont.TextStyle {
|
||||||
|
switch textStyle {
|
||||||
|
case .largeTitle:
|
||||||
|
return .largeTitle
|
||||||
|
case .title:
|
||||||
|
return .title1
|
||||||
|
case .title2:
|
||||||
|
return .title2
|
||||||
|
case .title3:
|
||||||
|
return .title3
|
||||||
|
case .headline:
|
||||||
|
return .headline
|
||||||
|
case .subheadline:
|
||||||
|
return .subheadline
|
||||||
|
case .callout:
|
||||||
|
return .callout
|
||||||
|
case .body:
|
||||||
|
return .body
|
||||||
|
case .caption:
|
||||||
|
return .caption1
|
||||||
|
case .caption2:
|
||||||
|
return .caption2
|
||||||
|
case .footnote:
|
||||||
|
return .footnote
|
||||||
|
@unknown default:
|
||||||
|
fatalError("Missing a TextStyle mapping")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:enable convenience_type
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
// No fonts found
|
||||||
|
{% endif %}
|
|
@ -0,0 +1,281 @@
|
||||||
|
// swiftlint:disable all
|
||||||
|
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
|
||||||
|
|
||||||
|
{% if catalogs %}
|
||||||
|
{% set enumName %}{{param.enumName|default:"Asset"}}{% endset %}
|
||||||
|
{% set arResourceGroupType %}{{param.arResourceGroupTypeName|default:"ARResourceGroupAsset"}}{% endset %}
|
||||||
|
{% set colorType %}{{param.colorTypeName|default:"ColorAsset"}}{% endset %}
|
||||||
|
{% set dataType %}{{param.dataTypeName|default:"DataAsset"}}{% endset %}
|
||||||
|
{% set imageType %}{{param.imageTypeName|default:"ImageAsset"}}{% endset %}
|
||||||
|
{% set forceNamespaces %}{{param.forceProvidesNamespaces|default:"false"}}{% endset %}
|
||||||
|
{% set accessModifier %}{% if param.publicAccess %}public{% else %}internal{% endif %}{% endset %}
|
||||||
|
import SwiftUI
|
||||||
|
#if os(macOS)
|
||||||
|
import AppKit
|
||||||
|
#elseif os(iOS)
|
||||||
|
{% if resourceCount.arresourcegroup > 0 %}
|
||||||
|
import ARKit
|
||||||
|
{% endif %}
|
||||||
|
import UIKit
|
||||||
|
#elseif os(tvOS) || os(watchOS)
|
||||||
|
import UIKit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Deprecated typealiases
|
||||||
|
{% if resourceCount.color > 0 %}
|
||||||
|
@available(*, deprecated, renamed: "{{colorType}}.SystemColor", message: "This typealias will be removed in SwiftGen 7.0")
|
||||||
|
{{accessModifier}} typealias {{param.colorAliasName|default:"AssetColorTypeAlias"}} = {{colorType}}.SystemColor
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.image > 0 %}
|
||||||
|
@available(*, deprecated, renamed: "{{imageType}}.Image", message: "This typealias will be removed in SwiftGen 7.0")
|
||||||
|
{{accessModifier}} typealias {{param.imageAliasName|default:"AssetImageTypeAlias"}} = {{imageType}}.Image
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
// swiftlint:disable superfluous_disable_command file_length implicit_return
|
||||||
|
|
||||||
|
// MARK: - Asset Catalogs
|
||||||
|
|
||||||
|
{% macro enumBlock assets %}
|
||||||
|
{% call casesBlock assets %}
|
||||||
|
{% if param.allValues %}
|
||||||
|
|
||||||
|
// swiftlint:disable trailing_comma
|
||||||
|
{% if resourceCount.arresourcegroup > 0 %}
|
||||||
|
{{accessModifier}} static let allResourceGroups: [{{arResourceGroupType}}] = [
|
||||||
|
{% filter indent:2 %}{% call allValuesBlock assets "arresourcegroup" "" %}{% endfilter %}
|
||||||
|
]
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.color > 0 %}
|
||||||
|
{{accessModifier}} static let allColors: [{{colorType}}] = [
|
||||||
|
{% filter indent:2 %}{% call allValuesBlock assets "color" "" %}{% endfilter %}
|
||||||
|
]
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.data > 0 %}
|
||||||
|
{{accessModifier}} static let allDataAssets: [{{dataType}}] = [
|
||||||
|
{% filter indent:2 %}{% call allValuesBlock assets "data" "" %}{% endfilter %}
|
||||||
|
]
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.image > 0 %}
|
||||||
|
{{accessModifier}} static let allImages: [{{imageType}}] = [
|
||||||
|
{% filter indent:2 %}{% call allValuesBlock assets "image" "" %}{% endfilter %}
|
||||||
|
]
|
||||||
|
{% endif %}
|
||||||
|
// swiftlint:enable trailing_comma
|
||||||
|
{% endif %}
|
||||||
|
{% endmacro %}
|
||||||
|
{% macro casesBlock assets %}
|
||||||
|
{% for asset in assets %}
|
||||||
|
{% if asset.type == "arresourcegroup" %}
|
||||||
|
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{arResourceGroupType}}(name: "{{asset.value}}")
|
||||||
|
{% elif asset.type == "color" %}
|
||||||
|
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{colorType}}(name: "{{asset.value}}")
|
||||||
|
{% elif asset.type == "data" %}
|
||||||
|
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{dataType}}(name: "{{asset.value}}")
|
||||||
|
{% elif asset.type == "image" %}
|
||||||
|
{{accessModifier}} static let {{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}} = {{imageType}}(name: "{{asset.value}}")
|
||||||
|
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
|
||||||
|
{{accessModifier}} enum {{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
|
||||||
|
{% filter indent:2 %}{% call casesBlock asset.items %}{% endfilter %}
|
||||||
|
}
|
||||||
|
{% elif asset.items %}
|
||||||
|
{% call casesBlock asset.items %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endmacro %}
|
||||||
|
{% macro allValuesBlock assets filter prefix %}
|
||||||
|
{% for asset in assets %}
|
||||||
|
{% if asset.type == filter %}
|
||||||
|
{{prefix}}{{asset.name|swiftIdentifier:"pretty"|lowerFirstWord|escapeReservedKeywords}},
|
||||||
|
{% elif asset.items and ( forceNamespaces == "true" or asset.isNamespaced == "true" ) %}
|
||||||
|
{% set prefix2 %}{{prefix}}{{asset.name|swiftIdentifier:"pretty"|escapeReservedKeywords}}.{% endset %}
|
||||||
|
{% call allValuesBlock asset.items filter prefix2 %}
|
||||||
|
{% elif asset.items %}
|
||||||
|
{% call allValuesBlock asset.items filter prefix %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endmacro %}
|
||||||
|
// swiftlint:disable identifier_name line_length nesting type_body_length type_name
|
||||||
|
{{accessModifier}} enum {{enumName}} {
|
||||||
|
{% if catalogs.count > 1 or param.forceFileNameEnum %}
|
||||||
|
{% for catalog in catalogs %}
|
||||||
|
{{accessModifier}} enum {{catalog.name|swiftIdentifier:"pretty"|escapeReservedKeywords}} {
|
||||||
|
{% filter indent:2 %}{% call enumBlock catalog.assets %}{% endfilter %}
|
||||||
|
}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
{% call enumBlock catalogs.first.assets %}
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
// swiftlint:enable identifier_name line_length nesting type_body_length type_name
|
||||||
|
|
||||||
|
// MARK: - Implementation Details
|
||||||
|
{% if resourceCount.arresourcegroup > 0 %}
|
||||||
|
|
||||||
|
{{accessModifier}} struct {{arResourceGroupType}} {
|
||||||
|
{{accessModifier}} fileprivate(set) var name: String
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
@available(iOS 11.3, *)
|
||||||
|
{{accessModifier}} var referenceImages: Set<ARReferenceImage> {
|
||||||
|
return ARReferenceImage.referenceImages(in: self)
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 12.0, *)
|
||||||
|
{{accessModifier}} var referenceObjects: Set<ARReferenceObject> {
|
||||||
|
return ARReferenceObject.referenceObjects(in: self)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if os(iOS)
|
||||||
|
@available(iOS 11.3, *)
|
||||||
|
{{accessModifier}} extension ARReferenceImage {
|
||||||
|
static func referenceImages(in asset: {{arResourceGroupType}}) -> Set<ARReferenceImage> {
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
return referenceImages(inGroupNamed: asset.name, bundle: bundle) ?? Set()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 12.0, *)
|
||||||
|
{{accessModifier}} extension ARReferenceObject {
|
||||||
|
static func referenceObjects(in asset: {{arResourceGroupType}}) -> Set<ARReferenceObject> {
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
return referenceObjects(inGroupNamed: asset.name, bundle: bundle) ?? Set()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.color > 0 %}
|
||||||
|
|
||||||
|
{{accessModifier}} final class {{colorType}} {
|
||||||
|
{{accessModifier}} fileprivate(set) var name: String
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
{{accessModifier}} typealias SystemColor = NSColor
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
{{accessModifier}} typealias SystemColor = UIColor
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
|
||||||
|
{{accessModifier}} private(set) lazy var systemColor: SystemColor = {
|
||||||
|
guard let color = SystemColor(asset: self) else {
|
||||||
|
fatalError("Unable to load color asset named \(name).")
|
||||||
|
}
|
||||||
|
return color
|
||||||
|
}()
|
||||||
|
|
||||||
|
|
||||||
|
{{accessModifier}} private(set) lazy var color: Color = {
|
||||||
|
Color(systemColor)
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate init(name: String) {
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{accessModifier}} extension {{colorType}}.SystemColor {
|
||||||
|
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
|
||||||
|
convenience init?(asset: {{colorType}}) {
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
self.init(named: asset.name, in: bundle, compatibleWith: nil)
|
||||||
|
#elseif os(macOS)
|
||||||
|
self.init(named: NSColor.Name(asset.name), bundle: bundle)
|
||||||
|
#elseif os(watchOS)
|
||||||
|
self.init(named: asset.name)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.data > 0 %}
|
||||||
|
|
||||||
|
{{accessModifier}} struct {{dataType}} {
|
||||||
|
{{accessModifier}} fileprivate(set) var name: String
|
||||||
|
|
||||||
|
#if os(iOS) || os(tvOS) || os(macOS)
|
||||||
|
@available(iOS 9.0, macOS 10.11, *)
|
||||||
|
{{accessModifier}} var data: NSDataAsset {
|
||||||
|
guard let data = NSDataAsset(asset: self) else {
|
||||||
|
fatalError("Unable to load data asset named \(name).")
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if os(iOS) || os(tvOS) || os(macOS)
|
||||||
|
@available(iOS 9.0, macOS 10.11, *)
|
||||||
|
{{accessModifier}} extension NSDataAsset {
|
||||||
|
convenience init?(asset: {{dataType}}) {
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
self.init(name: asset.name, bundle: bundle)
|
||||||
|
#elseif os(macOS)
|
||||||
|
self.init(name: NSDataAsset.Name(asset.name), bundle: bundle)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
{% endif %}
|
||||||
|
{% if resourceCount.image > 0 %}
|
||||||
|
|
||||||
|
{{accessModifier}} struct {{imageType}} {
|
||||||
|
{{accessModifier}} fileprivate(set) var name: String
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
{{accessModifier}} typealias Image = NSImage
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
{{accessModifier}} typealias Image = UIImage
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{{accessModifier}} var image: Image {
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
let image = Image(named: name, in: bundle, compatibleWith: nil)
|
||||||
|
#elseif os(macOS)
|
||||||
|
let name = NSImage.Name(self.name)
|
||||||
|
let image = (bundle == .main) ? NSImage(named: name) : bundle.image(forResource: name)
|
||||||
|
#elseif os(watchOS)
|
||||||
|
let image = Image(named: name)
|
||||||
|
#endif
|
||||||
|
guard let result = image else {
|
||||||
|
fatalError("Unable to load image asset named \(name).")
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{accessModifier}} extension {{imageType}}.Image {
|
||||||
|
@available(macOS, deprecated,
|
||||||
|
message: "This initializer is unsafe on macOS, please use the {{imageType}}.image property")
|
||||||
|
convenience init?(asset: {{imageType}}) {
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
let bundle = {{param.bundle|default:"BundleToken.bundle"}}
|
||||||
|
self.init(named: asset.name, in: bundle, compatibleWith: nil)
|
||||||
|
#elseif os(macOS)
|
||||||
|
self.init(named: NSImage.Name(asset.name))
|
||||||
|
#elseif os(watchOS)
|
||||||
|
self.init(named: asset.name)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
{% if not param.bundle %}
|
||||||
|
|
||||||
|
// swiftlint:disable convenience_type
|
||||||
|
private final class BundleToken {
|
||||||
|
static let bundle: Bundle = {
|
||||||
|
#if SWIFT_PACKAGE
|
||||||
|
return Bundle.module
|
||||||
|
#else
|
||||||
|
return Bundle(for: BundleToken.self)
|
||||||
|
#endif
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:enable convenience_type
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
// No assets found
|
||||||
|
{% endif %}
|
|
@ -13,7 +13,6 @@
|
||||||
0D1922F226BDE29300052649 /* ZcashSDKStubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */; };
|
0D1922F226BDE29300052649 /* ZcashSDKStubs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */; };
|
||||||
0D1922F826BDEB3500052649 /* MockServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F726BDEB3500052649 /* MockServices.swift */; };
|
0D1922F826BDEB3500052649 /* MockServices.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D1922F726BDEB3500052649 /* MockServices.swift */; };
|
||||||
0D2ACE8026C2C67100D62E3C /* Zboto.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0D2ACE7F26C2C67100D62E3C /* Zboto.otf */; };
|
0D2ACE8026C2C67100D62E3C /* Zboto.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0D2ACE7F26C2C67100D62E3C /* Zboto.otf */; };
|
||||||
0D2ACE8326C2C8B400D62E3C /* SwiftUI+secant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D2ACE8226C2C8B400D62E3C /* SwiftUI+secant.swift */; };
|
|
||||||
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281726C5864B00262533 /* ProfileScreen.swift */; };
|
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281726C5864B00262533 /* ProfileScreen.swift */; };
|
||||||
0D32281A26C5864B00262533 /* ProfileScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */; };
|
0D32281A26C5864B00262533 /* ProfileScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */; };
|
||||||
0D32281E26C5867D00262533 /* ScanQrScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281C26C5867D00262533 /* ScanQrScreen.swift */; };
|
0D32281E26C5867D00262533 /* ScanQrScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D32281C26C5867D00262533 /* ScanQrScreen.swift */; };
|
||||||
|
@ -51,6 +50,9 @@
|
||||||
0DA13CA126C1955600E3B610 /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9F26C1955600E3B610 /* HomeScreen.swift */; };
|
0DA13CA126C1955600E3B610 /* HomeScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13C9F26C1955600E3B610 /* HomeScreen.swift */; };
|
||||||
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */; };
|
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */; };
|
||||||
0DA13CA526C1963000E3B610 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA426C1963000E3B610 /* Balance.swift */; };
|
0DA13CA526C1963000E3B610 /* Balance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DA13CA426C1963000E3B610 /* Balance.swift */; };
|
||||||
|
660558E9270C7A54009D6954 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 660558E8270C7A54009D6954 /* Colors.xcassets */; };
|
||||||
|
660558F7270C862F009D6954 /* Fonts+Generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660558F5270C862F009D6954 /* Fonts+Generated.swift */; };
|
||||||
|
660558F8270C862F009D6954 /* XCAssets+Generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660558F6270C862F009D6954 /* XCAssets+Generated.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
/* Begin PBXContainerItemProxy section */
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
@ -77,7 +79,6 @@
|
||||||
0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZcashSDKStubs.swift; sourceTree = "<group>"; };
|
0D1922F126BDE29300052649 /* ZcashSDKStubs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZcashSDKStubs.swift; sourceTree = "<group>"; };
|
||||||
0D1922F726BDEB3500052649 /* MockServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockServices.swift; sourceTree = "<group>"; };
|
0D1922F726BDEB3500052649 /* MockServices.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockServices.swift; sourceTree = "<group>"; };
|
||||||
0D2ACE7F26C2C67100D62E3C /* Zboto.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zboto.otf; sourceTree = "<group>"; };
|
0D2ACE7F26C2C67100D62E3C /* Zboto.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = Zboto.otf; sourceTree = "<group>"; };
|
||||||
0D2ACE8226C2C8B400D62E3C /* SwiftUI+secant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SwiftUI+secant.swift"; sourceTree = "<group>"; };
|
|
||||||
0D32281726C5864B00262533 /* ProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreen.swift; sourceTree = "<group>"; };
|
0D32281726C5864B00262533 /* ProfileScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreen.swift; sourceTree = "<group>"; };
|
||||||
0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreenViewModel.swift; sourceTree = "<group>"; };
|
0D32281826C5864B00262533 /* ProfileScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
0D32281C26C5867D00262533 /* ScanQrScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanQrScreen.swift; sourceTree = "<group>"; };
|
0D32281C26C5867D00262533 /* ScanQrScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanQrScreen.swift; sourceTree = "<group>"; };
|
||||||
|
@ -121,6 +122,9 @@
|
||||||
0DA13C9F26C1955600E3B610 /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = "<group>"; };
|
0DA13C9F26C1955600E3B610 /* HomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreen.swift; sourceTree = "<group>"; };
|
||||||
0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = "<group>"; };
|
0DA13CA026C1955600E3B610 /* HomeScreenViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeScreenViewModel.swift; sourceTree = "<group>"; };
|
||||||
0DA13CA426C1963000E3B610 /* Balance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Balance.swift; sourceTree = "<group>"; };
|
0DA13CA426C1963000E3B610 /* Balance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Balance.swift; sourceTree = "<group>"; };
|
||||||
|
660558E8270C7A54009D6954 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = "<group>"; };
|
||||||
|
660558F5270C862F009D6954 /* Fonts+Generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Fonts+Generated.swift"; sourceTree = "<group>"; };
|
||||||
|
660558F6270C862F009D6954 /* XCAssets+Generated.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "XCAssets+Generated.swift"; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -211,14 +215,6 @@
|
||||||
path = Fonts;
|
path = Fonts;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
0D2ACE8126C2C71100D62E3C /* Utilities */ = {
|
|
||||||
isa = PBXGroup;
|
|
||||||
children = (
|
|
||||||
0D2ACE8226C2C8B400D62E3C /* SwiftUI+secant.swift */,
|
|
||||||
);
|
|
||||||
path = Utilities;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
0D32281526C5862400262533 /* Profile */ = {
|
0D32281526C5862400262533 /* Profile */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -296,8 +292,8 @@
|
||||||
0D4E7A0726B364170058B01E /* secant */ = {
|
0D4E7A0726B364170058B01E /* secant */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
660558F4270C85F7009D6954 /* Generated */,
|
||||||
0D5D16F326E24CB900AD33D1 /* App Errors */,
|
0D5D16F326E24CB900AD33D1 /* App Errors */,
|
||||||
0D2ACE8126C2C71100D62E3C /* Utilities */,
|
|
||||||
0D2ACE7E26C2C65E00D62E3C /* Fonts */,
|
0D2ACE7E26C2C65E00D62E3C /* Fonts */,
|
||||||
0DA13CA326C1960A00E3B610 /* Models */,
|
0DA13CA326C1960A00E3B610 /* Models */,
|
||||||
0DA13C9126C15E1900E3B610 /* UI Components */,
|
0DA13C9126C15E1900E3B610 /* UI Components */,
|
||||||
|
@ -308,6 +304,7 @@
|
||||||
0D4E7A0826B364170058B01E /* SecantApp.swift */,
|
0D4E7A0826B364170058B01E /* SecantApp.swift */,
|
||||||
0D4E7A0A26B364170058B01E /* ContentView.swift */,
|
0D4E7A0A26B364170058B01E /* ContentView.swift */,
|
||||||
0D4E7A0C26B364180058B01E /* Assets.xcassets */,
|
0D4E7A0C26B364180058B01E /* Assets.xcassets */,
|
||||||
|
660558E8270C7A54009D6954 /* Colors.xcassets */,
|
||||||
0D4E7A1126B364180058B01E /* Info.plist */,
|
0D4E7A1126B364180058B01E /* Info.plist */,
|
||||||
0D4E7A0E26B364180058B01E /* Preview Content */,
|
0D4E7A0E26B364180058B01E /* Preview Content */,
|
||||||
0D170A7326BC802E00EB6A46 /* Routers */,
|
0D170A7326BC802E00EB6A46 /* Routers */,
|
||||||
|
@ -420,6 +417,15 @@
|
||||||
path = Models;
|
path = Models;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
660558F4270C85F7009D6954 /* Generated */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
660558F5270C862F009D6954 /* Fonts+Generated.swift */,
|
||||||
|
660558F6270C862F009D6954 /* XCAssets+Generated.swift */,
|
||||||
|
);
|
||||||
|
path = Generated;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
|
@ -427,6 +433,7 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 0D4E7A2A26B364180058B01E /* Build configuration list for PBXNativeTarget "secant-testnet" */;
|
buildConfigurationList = 0D4E7A2A26B364180058B01E /* Build configuration list for PBXNativeTarget "secant-testnet" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
|
664E39ED270C693C0044AD7E /* SwiftGen */,
|
||||||
6696BA8726F0B1D200D5C875 /* SwiftLint */,
|
6696BA8726F0B1D200D5C875 /* SwiftLint */,
|
||||||
0D4E7A0126B364170058B01E /* Sources */,
|
0D4E7A0126B364170058B01E /* Sources */,
|
||||||
0D4E7A0226B364170058B01E /* Frameworks */,
|
0D4E7A0226B364170058B01E /* Frameworks */,
|
||||||
|
@ -525,6 +532,7 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
0D4E7A1026B364180058B01E /* Preview Assets.xcassets in Resources */,
|
0D4E7A1026B364180058B01E /* Preview Assets.xcassets in Resources */,
|
||||||
|
660558E9270C7A54009D6954 /* Colors.xcassets in Resources */,
|
||||||
0D4E7A0D26B364180058B01E /* Assets.xcassets in Resources */,
|
0D4E7A0D26B364180058B01E /* Assets.xcassets in Resources */,
|
||||||
0D2ACE8026C2C67100D62E3C /* Zboto.otf in Resources */,
|
0D2ACE8026C2C67100D62E3C /* Zboto.otf in Resources */,
|
||||||
);
|
);
|
||||||
|
@ -547,6 +555,27 @@
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
664E39ED270C693C0044AD7E /* SwiftGen */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"$(SRCROOT)/swiftlint.yml",
|
||||||
|
);
|
||||||
|
name = SwiftGen;
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Generated/XCAssets+Generated.swift",
|
||||||
|
"$(DERIVED_FILE_DIR)/Generated/Fonts+Generated.swift",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "if which swiftgen >/dev/null; then\n swiftgen\nelse\n echo \"warning: SwiftGen not installed, download from https://github.com/SwiftGen/SwiftGen\"\nfi\n";
|
||||||
|
};
|
||||||
6696BA8726F0B1D200D5C875 /* SwiftLint */ = {
|
6696BA8726F0B1D200D5C875 /* SwiftLint */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
|
@ -572,6 +601,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
660558F8270C862F009D6954 /* XCAssets+Generated.swift in Sources */,
|
||||||
0D32281F26C5867D00262533 /* ScanQrScreenViewModel.swift in Sources */,
|
0D32281F26C5867D00262533 /* ScanQrScreenViewModel.swift in Sources */,
|
||||||
0D32282E26C5870B00262533 /* SendScreenViewModel.swift in Sources */,
|
0D32282E26C5870B00262533 /* SendScreenViewModel.swift in Sources */,
|
||||||
0D32282D26C5870B00262533 /* SendScreen.swift in Sources */,
|
0D32282D26C5870B00262533 /* SendScreen.swift in Sources */,
|
||||||
|
@ -592,6 +622,7 @@
|
||||||
0D4E7A0B26B364170058B01E /* ContentView.swift in Sources */,
|
0D4E7A0B26B364170058B01E /* ContentView.swift in Sources */,
|
||||||
0D170A7226BC802800EB6A46 /* Router.swift in Sources */,
|
0D170A7226BC802800EB6A46 /* Router.swift in Sources */,
|
||||||
0D354A0926D5A9D000315F45 /* Services.swift in Sources */,
|
0D354A0926D5A9D000315F45 /* Services.swift in Sources */,
|
||||||
|
660558F7270C862F009D6954 /* Fonts+Generated.swift in Sources */,
|
||||||
0DA13C9726C186FF00E3B610 /* RestoreWalletScreen.swift in Sources */,
|
0DA13C9726C186FF00E3B610 /* RestoreWalletScreen.swift in Sources */,
|
||||||
0D1922EA26BDD96A00052649 /* ViewModel.swift in Sources */,
|
0D1922EA26BDD96A00052649 /* ViewModel.swift in Sources */,
|
||||||
0D4E7A0926B364170058B01E /* SecantApp.swift in Sources */,
|
0D4E7A0926B364170058B01E /* SecantApp.swift in Sources */,
|
||||||
|
@ -607,7 +638,6 @@
|
||||||
0D354A0A26D5A9D000315F45 /* KeyStoring.swift in Sources */,
|
0D354A0A26D5A9D000315F45 /* KeyStoring.swift in Sources */,
|
||||||
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */,
|
0DA13CA226C1955600E3B610 /* HomeScreenViewModel.swift in Sources */,
|
||||||
0D32282926C586E000262533 /* RequestZcashScreenViewModel.swift in Sources */,
|
0D32282926C586E000262533 /* RequestZcashScreenViewModel.swift in Sources */,
|
||||||
0D2ACE8326C2C8B400D62E3C /* SwiftUI+secant.swift in Sources */,
|
|
||||||
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */,
|
0D32281926C5864B00262533 /* ProfileScreen.swift in Sources */,
|
||||||
0D32282426C586A800262533 /* HistoryScreenViewModel.swift in Sources */,
|
0D32282426C586A800262533 /* HistoryScreenViewModel.swift in Sources */,
|
||||||
);
|
);
|
||||||
|
@ -770,7 +800,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 3;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = RLPRR8CPQG;
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = secant/Info.plist;
|
INFOPLIST_FILE = secant/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
|
@ -794,7 +824,7 @@
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 3;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
|
||||||
DEVELOPMENT_TEAM = RLPRR8CPQG;
|
DEVELOPMENT_TEAM = "";
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = secant/Info.plist;
|
INFOPLIST_FILE = secant/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.992",
|
||||||
|
"green" : "0.976",
|
||||||
|
"red" : "0.953"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.851",
|
||||||
|
"green" : "0.753",
|
||||||
|
"red" : "0.655"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.976",
|
||||||
|
"green" : "0.937",
|
||||||
|
"red" : "0.898"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "0.200",
|
||||||
|
"blue" : "0.937",
|
||||||
|
"green" : "0.863",
|
||||||
|
"red" : "0.784"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.996",
|
||||||
|
"green" : "0.992",
|
||||||
|
"red" : "0.984"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"appearances" : [
|
||||||
|
{
|
||||||
|
"appearance" : "luminosity",
|
||||||
|
"value" : "dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"color" : {
|
||||||
|
"color-space" : "srgb",
|
||||||
|
"components" : {
|
||||||
|
"alpha" : "1.000",
|
||||||
|
"blue" : "0.937",
|
||||||
|
"green" : "0.863",
|
||||||
|
"red" : "0.784"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ import SwiftUI
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Text("Hello, Zcash!")
|
Text("Hello, Zcash!")
|
||||||
|
.font(FontFamily.Zboto.regular.textStyle(.body))
|
||||||
.padding()
|
.padding()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,133 @@
|
||||||
|
// swiftlint:disable all
|
||||||
|
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
#if os(OSX)
|
||||||
|
import AppKit.NSFont
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
import UIKit.UIFont
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Deprecated typealiases
|
||||||
|
@available(*, deprecated, renamed: "FontConvertible.Font", message: "This typealias will be removed in SwiftGen 7.0")
|
||||||
|
internal typealias SystemFont = FontConvertible.SystemFont
|
||||||
|
|
||||||
|
// swiftlint:disable superfluous_disable_command
|
||||||
|
// swiftlint:disable file_length
|
||||||
|
|
||||||
|
// MARK: - Fonts
|
||||||
|
|
||||||
|
// swiftlint:disable identifier_name line_length type_body_length
|
||||||
|
internal enum FontFamily {
|
||||||
|
internal enum Zboto {
|
||||||
|
internal static let regular = FontConvertible(name: "ZbotoRegular", family: "Zboto", path: "Zboto.otf")
|
||||||
|
internal static let all: [FontConvertible] = [regular]
|
||||||
|
}
|
||||||
|
internal static let allCustomFonts: [FontConvertible] = [Zboto.all].flatMap { $0 }
|
||||||
|
internal static func registerAllCustomFonts() {
|
||||||
|
allCustomFonts.forEach { $0.register() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// swiftlint:enable identifier_name line_length type_body_length
|
||||||
|
|
||||||
|
// MARK: - Implementation Details
|
||||||
|
|
||||||
|
internal struct FontConvertible {
|
||||||
|
internal let name: String
|
||||||
|
internal let family: String
|
||||||
|
internal let path: String
|
||||||
|
|
||||||
|
#if os(OSX)
|
||||||
|
internal typealias SystemFont = NSFont
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
internal typealias SystemFont = UIFont
|
||||||
|
#endif
|
||||||
|
|
||||||
|
internal func font(size: CGFloat) -> SystemFont {
|
||||||
|
guard let font = SystemFont(font: self, size: size) else {
|
||||||
|
fatalError("Unable to initialize font '\(name)' (\(family))")
|
||||||
|
}
|
||||||
|
return font
|
||||||
|
}
|
||||||
|
|
||||||
|
internal func textStyle(_ textStyle: Font.TextStyle) -> Font {
|
||||||
|
Font.mappedFont(name, textStyle: textStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
internal func register() {
|
||||||
|
// swiftlint:disable:next conditional_returns_on_newline
|
||||||
|
guard let url = url else { return }
|
||||||
|
CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate var url: URL? {
|
||||||
|
// swiftlint:disable:next implicit_return
|
||||||
|
return BundleToken.bundle.url(forResource: path, withExtension: nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal extension FontConvertible.SystemFont {
|
||||||
|
convenience init?(font: FontConvertible, size: CGFloat) {
|
||||||
|
#if os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
|
||||||
|
font.register()
|
||||||
|
}
|
||||||
|
#elseif os(OSX)
|
||||||
|
if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
|
||||||
|
font.register()
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
self.init(name: font.name, size: size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable convenience_type
|
||||||
|
private final class BundleToken {
|
||||||
|
static let bundle: Bundle = {
|
||||||
|
#if SWIFT_PACKAGE
|
||||||
|
return Bundle.module
|
||||||
|
#else
|
||||||
|
return Bundle(for: BundleToken.self)
|
||||||
|
#endif
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate extension Font {
|
||||||
|
static func mappedFont(_ name: String, textStyle: TextStyle) -> Font {
|
||||||
|
let fontSize = UIFont.preferredFont(forTextStyle: self.mapToUIFontTextStyle(textStyle)).pointSize
|
||||||
|
return Font.custom(name, size: fontSize, relativeTo: textStyle)
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable:next cyclomatic_complexity
|
||||||
|
static func mapToUIFontTextStyle(_ textStyle: SwiftUI.Font.TextStyle) -> UIFont.TextStyle {
|
||||||
|
switch textStyle {
|
||||||
|
case .largeTitle:
|
||||||
|
return .largeTitle
|
||||||
|
case .title:
|
||||||
|
return .title1
|
||||||
|
case .title2:
|
||||||
|
return .title2
|
||||||
|
case .title3:
|
||||||
|
return .title3
|
||||||
|
case .headline:
|
||||||
|
return .headline
|
||||||
|
case .subheadline:
|
||||||
|
return .subheadline
|
||||||
|
case .callout:
|
||||||
|
return .callout
|
||||||
|
case .body:
|
||||||
|
return .body
|
||||||
|
case .caption:
|
||||||
|
return .caption1
|
||||||
|
case .caption2:
|
||||||
|
return .caption2
|
||||||
|
case .footnote:
|
||||||
|
return .footnote
|
||||||
|
@unknown default:
|
||||||
|
fatalError("Missing a TextStyle mapping")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:enable convenience_type
|
|
@ -0,0 +1,86 @@
|
||||||
|
// swiftlint:disable all
|
||||||
|
// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
#if os(macOS)
|
||||||
|
import AppKit
|
||||||
|
#elseif os(iOS)
|
||||||
|
import UIKit
|
||||||
|
#elseif os(tvOS) || os(watchOS)
|
||||||
|
import UIKit
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Deprecated typealiases
|
||||||
|
@available(*, deprecated, renamed: "ColorAsset.SystemColor", message: "This typealias will be removed in SwiftGen 7.0")
|
||||||
|
internal typealias AssetColorTypeAlias = ColorAsset.SystemColor
|
||||||
|
|
||||||
|
// swiftlint:disable superfluous_disable_command file_length implicit_return
|
||||||
|
|
||||||
|
// MARK: - Asset Catalogs
|
||||||
|
|
||||||
|
// swiftlint:disable identifier_name line_length nesting type_body_length type_name
|
||||||
|
internal enum Asset {
|
||||||
|
internal enum Assets {
|
||||||
|
}
|
||||||
|
internal enum Colors {
|
||||||
|
internal static let primaryButton = ColorAsset(name: "PrimaryButton")
|
||||||
|
internal static let primaryButtonDisabled = ColorAsset(name: "PrimaryButtonDisabled")
|
||||||
|
internal static let primaryButtonPressed = ColorAsset(name: "PrimaryButtonPressed")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// swiftlint:enable identifier_name line_length nesting type_body_length type_name
|
||||||
|
|
||||||
|
// MARK: - Implementation Details
|
||||||
|
|
||||||
|
internal final class ColorAsset {
|
||||||
|
internal fileprivate(set) var name: String
|
||||||
|
|
||||||
|
#if os(macOS)
|
||||||
|
internal typealias SystemColor = NSColor
|
||||||
|
#elseif os(iOS) || os(tvOS) || os(watchOS)
|
||||||
|
internal typealias SystemColor = UIColor
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
|
||||||
|
internal private(set) lazy var systemColor: SystemColor = {
|
||||||
|
guard let color = SystemColor(asset: self) else {
|
||||||
|
fatalError("Unable to load color asset named \(name).")
|
||||||
|
}
|
||||||
|
return color
|
||||||
|
}()
|
||||||
|
|
||||||
|
internal private(set) lazy var color: Color = {
|
||||||
|
Color(systemColor)
|
||||||
|
}()
|
||||||
|
|
||||||
|
fileprivate init(name: String) {
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal extension ColorAsset.SystemColor {
|
||||||
|
@available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, *)
|
||||||
|
convenience init?(asset: ColorAsset) {
|
||||||
|
let bundle = BundleToken.bundle
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
self.init(named: asset.name, in: bundle, compatibleWith: nil)
|
||||||
|
#elseif os(macOS)
|
||||||
|
self.init(named: NSColor.Name(asset.name), bundle: bundle)
|
||||||
|
#elseif os(watchOS)
|
||||||
|
self.init(named: asset.name)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:disable convenience_type
|
||||||
|
private final class BundleToken {
|
||||||
|
static let bundle: Bundle = {
|
||||||
|
#if SWIFT_PACKAGE
|
||||||
|
return Bundle.module
|
||||||
|
#else
|
||||||
|
return Bundle(for: BundleToken.self)
|
||||||
|
#endif
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// swiftlint:enable convenience_type
|
|
@ -1,15 +0,0 @@
|
||||||
//
|
|
||||||
// SwiftUI+secant.swift
|
|
||||||
// secant
|
|
||||||
//
|
|
||||||
// Created by Francisco Gindre on 8/10/21.
|
|
||||||
//
|
|
||||||
|
|
||||||
import Foundation
|
|
||||||
import SwiftUI
|
|
||||||
|
|
||||||
extension Font {
|
|
||||||
static func zboto(_ size: CGFloat) -> Font {
|
|
||||||
Font.custom("Zboto", size: size)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
input_dir: secant/
|
||||||
|
output_dir: secant/Generated/
|
||||||
|
|
||||||
|
xcassets:
|
||||||
|
inputs:
|
||||||
|
- Assets.xcassets
|
||||||
|
- Colors.xcassets
|
||||||
|
outputs:
|
||||||
|
templatePath: Templates/xcassets/assets_swift5_swiftui.stencil
|
||||||
|
params:
|
||||||
|
forceProvidesNamespaces: true
|
||||||
|
output: XCAssets+Generated.swift
|
||||||
|
|
||||||
|
fonts:
|
||||||
|
inputs:
|
||||||
|
- Fonts/Zboto.otf
|
||||||
|
outputs:
|
||||||
|
templatePath: Templates/fonts/fonts_swift5_swiftui.stencil
|
||||||
|
output: Fonts+Generated.swift
|
Loading…
Reference in New Issue