[#1362] Release 1-2-1 preview

- The scan qr for some cameras returned several QR codes found, this needed to be handled

[#1362] Release 1-2-1 preview

- All texts localized
This commit is contained in:
Lukas Korba 2024-10-09 07:52:39 +02:00
parent a9aae12413
commit acdba147b4
18 changed files with 244 additions and 145 deletions

View File

@ -89,7 +89,7 @@ let package = Package(
.package(url: "https://github.com/pointfreeco/swift-case-paths", from: "1.5.4"), .package(url: "https://github.com/pointfreeco/swift-case-paths", from: "1.5.4"),
.package(url: "https://github.com/pointfreeco/swift-url-routing", from: "0.6.2"), .package(url: "https://github.com/pointfreeco/swift-url-routing", from: "0.6.2"),
.package(url: "https://github.com/zcash-hackworks/MnemonicSwift", from: "2.2.4"), .package(url: "https://github.com/zcash-hackworks/MnemonicSwift", from: "2.2.4"),
.package(url: "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk", from: "2.2.4"), .package(url: "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk", exact: "2.2.3"),
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.27.0"), .package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.27.0"),
.package(url: "https://github.com/flexa/flexa-ios.git", from: "1.0.3"), .package(url: "https://github.com/flexa/flexa-ios.git", from: "1.0.3"),
.package(url: "https://github.com/pacu/zcash-swift-payment-uri", from: "0.1.0-beta.9") .package(url: "https://github.com/pacu/zcash-swift-payment-uri", from: "0.1.0-beta.9")

View File

@ -84,7 +84,7 @@ public struct AddressDetails {
case .copyToPastboard: case .copyToPastboard:
pasteboard.setString(state.address) pasteboard.setString(state.address)
state.toast = .top("Copied to the clipboard!") state.toast = .top(L10n.General.copiedToTheClipboard)
return .none return .none
case .generateQRCode: case .generateQRCode:

View File

@ -74,7 +74,7 @@ public struct AddressDetailsView: View {
Spacer() Spacer()
ZashiButton( ZashiButton(
"Share QR Code", L10n.AddressDetails.shareQR,
prefixView: prefixView:
Asset.Assets.Icons.share.image Asset.Assets.Icons.share.image
.zImage(size: 20, style: Design.Btns.Primary.fg) .zImage(size: 20, style: Design.Btns.Primary.fg)
@ -85,7 +85,7 @@ public struct AddressDetailsView: View {
.disabled(store.addressToShare != nil) .disabled(store.addressToShare != nil)
ZashiButton( ZashiButton(
"Copy Address", L10n.AddressDetails.copyAddress,
type: .ghost, type: .ghost,
prefixView: prefixView:
Asset.Assets.copy.image Asset.Assets.copy.image
@ -129,9 +129,9 @@ extension AddressDetailsView {
UIShareDialogView(activityItems: [ UIShareDialogView(activityItems: [
ShareableImage( ShareableImage(
image: UIImage(cgImage: cgImg), image: UIImage(cgImage: cgImg),
title: "My Zashi ZEC Address", title: L10n.AddressDetails.shareTitle,
reason: "Hi, scan this QR code to send me a ZEC payment!" reason: L10n.AddressDetails.shareDesc
), "Hi, scan this QR code to send me a ZEC payment!" ), L10n.AddressDetails.shareDesc
]) { ]) {
store.send(.shareFinished) store.send(.shareFinished)
} }

View File

@ -28,13 +28,13 @@ public struct DeeplinkWarningView: View {
.padding(.bottom, 24) .padding(.bottom, 24)
.padding(.leading, 12) .padding(.leading, 12)
Text("Looks like you used a third-party app to scan for payment.") Text(L10n.DeeplinkWarning.title)
.zFont(.semiBold, size: 24, style: Design.Text.primary) .zFont(.semiBold, size: 24, style: Design.Text.primary)
.minimumScaleFactor(0.5) .minimumScaleFactor(0.5)
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.lineLimit(2) .lineLimit(2)
Text("For better safety and security, rescan the QR code with Zashi.") Text(L10n.DeeplinkWarning.desc)
.zFont(size: 14, style: Design.Text.primary) .zFont(size: 14, style: Design.Text.primary)
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
.screenHorizontalPadding() .screenHorizontalPadding()
@ -42,7 +42,7 @@ public struct DeeplinkWarningView: View {
Spacer() Spacer()
ZashiButton("Rescan in Zashi") { ZashiButton(L10n.DeeplinkWarning.cta) {
store.send(.gotItTapped) store.send(.gotItTapped)
} }
.padding(.bottom, 24) .padding(.bottom, 24)
@ -51,7 +51,7 @@ public struct DeeplinkWarningView: View {
.navigationBarTitleDisplayMode(.inline) .navigationBarTitleDisplayMode(.inline)
.screenHorizontalPadding() .screenHorizontalPadding()
.applyErredScreenBackground() .applyErredScreenBackground()
.screenTitle("HELLO!") .screenTitle(L10n.DeeplinkWarning.screenTitle.uppercased())
} }
} }

View File

@ -68,7 +68,7 @@ public struct Receive {
case .copyToPastboard(let text): case .copyToPastboard(let text):
pasteboard.setString(text) pasteboard.setString(text)
state.toast = .top("Copied to the clipboard!") state.toast = .top(L10n.General.copiedToTheClipboard)
return .none return .none
case .requestTapped: case .requestTapped:

View File

@ -38,7 +38,7 @@ public struct ReceiveView: View {
WithPerceptionTracking { WithPerceptionTracking {
VStack(alignment: .leading, spacing: 0) { VStack(alignment: .leading, spacing: 0) {
HStack { HStack {
Text("Receive Zcash") Text(L10n.Receive.title)
.zFont(.semiBold, size: 28, style: Design.Text.primary) .zFont(.semiBold, size: 28, style: Design.Text.primary)
.lineLimit(1) .lineLimit(1)
.padding(.top, 24) .padding(.top, 24)
@ -47,7 +47,7 @@ public struct ReceiveView: View {
Spacer() Spacer()
} }
Text("Prioritize using your shielded address for maximum privacy.") Text(L10n.Receive.warning)
.zFont(size: 16, style: Design.Text.secondary) .zFont(size: 16, style: Design.Text.secondary)
} }
.padding(.horizontal, 20) .padding(.horizontal, 20)
@ -55,23 +55,9 @@ public struct ReceiveView: View {
currentFocus = .uaAddress currentFocus = .uaAddress
} }
// HStack(alignment: .top, spacing: 0) {
// Asset.Assets.infoOutline.image
// .zImage(size: 20, style: Design.Text.tertiary)
// .padding(.trailing, 12)
//
// Text("Prioritize using shielded address for maximum privacy.")
// .zFont(size: 12, style: Design.Text.tertiary)
// .padding(.top, 3)
//
// Spacer(minLength: 0)
// }
// .padding(.horizontal, 20)
// .padding(.top, 24)
addressBlock( addressBlock(
prefixIcon: Asset.Assets.Brandmarks.brandmarkMax.image, prefixIcon: Asset.Assets.Brandmarks.brandmarkMax.image,
title: "Zcash Shielded Address", title: L10n.Receive.shieldedAddress,
address: store.unifiedAddress, address: store.unifiedAddress,
postfixIcon: Asset.Assets.Icons.shieldTickFilled.image, postfixIcon: Asset.Assets.Icons.shieldTickFilled.image,
iconFg: Design.Utility.Purple._800, iconFg: Design.Utility.Purple._800,
@ -94,7 +80,7 @@ public struct ReceiveView: View {
addressBlock( addressBlock(
prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image, prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image,
title: "Zcash Transparent Address", title: L10n.Receive.transparentAddress,
address: store.transparentAddress, address: store.transparentAddress,
iconFg: Design.Text.primary, iconFg: Design.Text.primary,
iconBg: Design.Surfaces.bgTertiary, iconBg: Design.Surfaces.bgTertiary,
@ -116,7 +102,7 @@ public struct ReceiveView: View {
if networkType == .testnet { if networkType == .testnet {
addressBlock( addressBlock(
prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image, prefixIcon: Asset.Assets.Brandmarks.brandmarkLow.image,
title: "Zcash Sapling Address", title: L10n.Receive.saplingAddress,
address: store.saplingAddress, address: store.saplingAddress,
iconFg: Design.Text.primary, iconFg: Design.Text.primary,
iconBg: Design.Surfaces.bgTertiary, iconBg: Design.Surfaces.bgTertiary,
@ -170,8 +156,6 @@ public struct ReceiveView: View {
Text(address.zip316) Text(address.zip316)
.zFont(size: 14, style: Design.Text.tertiary) .zFont(size: 14, style: Design.Text.tertiary)
//.truncationMode(.middle)
//.frame(maxWidth: 110)
.padding(.bottom, expanded ? 10 : 0) .padding(.bottom, expanded ? 10 : 0)
} }
.lineLimit(1) .lineLimit(1)
@ -188,15 +172,15 @@ public struct ReceiveView: View {
if expanded { if expanded {
HStack(spacing: 8) { HStack(spacing: 8) {
button("Copy", fill: iconBg.color, icon: Asset.Assets.copy.image) { button(L10n.Receive.copy, fill: iconBg.color, icon: Asset.Assets.copy.image) {
copyAction() copyAction()
} }
button("QR Code", fill: iconBg.color, icon: Asset.Assets.Icons.qr.image) { button(L10n.Receive.qrCode, fill: iconBg.color, icon: Asset.Assets.Icons.qr.image) {
qrAction() qrAction()
} }
button("Request", fill: iconBg.color, icon: Asset.Assets.Icons.coinsHand.image) { button(L10n.Receive.request, fill: iconBg.color, icon: Asset.Assets.Icons.coinsHand.image) {
requestAction() requestAction()
} }
} }

View File

@ -18,8 +18,11 @@ public struct RequestZecSummaryView: View {
@Perception.Bindable var store: StoreOf<RequestZec> @Perception.Bindable var store: StoreOf<RequestZec>
public init(store: StoreOf<RequestZec>) { let tokenName: String
public init(store: StoreOf<RequestZec>, tokenName: String) {
self.store = store self.store = store
self.tokenName = tokenName
} }
public var body: some View { public var body: some View {
@ -30,7 +33,7 @@ public struct RequestZecSummaryView: View {
Group { Group {
Text(store.requestedZec.decimalString()) Text(store.requestedZec.decimalString())
+ Text(" ZEC") + Text(" \(tokenName)")
.foregroundColor(Design.Text.quaternary.color) .foregroundColor(Design.Text.quaternary.color)
} }
.zFont(.semiBold, size: 56, style: Design.Text.primary) .zFont(.semiBold, size: 56, style: Design.Text.primary)
@ -64,7 +67,7 @@ public struct RequestZecSummaryView: View {
Spacer() Spacer()
ZashiButton( ZashiButton(
"Share QR Code", L10n.RequestZec.Summary.shareQR,
prefixView: prefixView:
Asset.Assets.Icons.share.image Asset.Assets.Icons.share.image
.zImage(size: 20, style: Design.Btns.Primary.fg) .zImage(size: 20, style: Design.Btns.Primary.fg)
@ -75,7 +78,7 @@ public struct RequestZecSummaryView: View {
.disabled(store.encryptedOutputToBeShared != nil) .disabled(store.encryptedOutputToBeShared != nil)
ZashiButton( ZashiButton(
"Close", L10n.General.close,
type: .ghost type: .ghost
) { ) {
store.send(.cancelRequestTapped) store.send(.cancelRequestTapped)
@ -89,7 +92,7 @@ public struct RequestZecSummaryView: View {
.onAppear { store.send(.onAppear) } .onAppear { store.send(.onAppear) }
.onDisappear { store.send(.onDisappear) } .onDisappear { store.send(.onDisappear) }
} }
.screenTitle("Request") .screenTitle(L10n.General.request)
.screenHorizontalPadding() .screenHorizontalPadding()
.applyScreenBackground() .applyScreenBackground()
.zashiBack() .zashiBack()
@ -117,9 +120,9 @@ extension RequestZecSummaryView {
UIShareDialogView(activityItems: [ UIShareDialogView(activityItems: [
ShareableImage( ShareableImage(
image: UIImage(cgImage: cgImg), image: UIImage(cgImage: cgImg),
title: "Request ZEC", title: L10n.RequestZec.Summary.shareTitle,
reason: "Hi, I have generated a ZEC payment request for you using the Zashi app!" reason: L10n.RequestZec.Summary.shareDesc
), "Hi, I have generated a ZEC payment request for you using the Zashi app! (download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)" ), "\(L10n.RequestZec.Summary.shareDesc) \(L10n.RequestZec.Summary.shareMsg)"
]) { ]) {
store.send(.shareFinished) store.send(.shareFinished)
} }
@ -134,6 +137,6 @@ extension RequestZecSummaryView {
#Preview { #Preview {
NavigationView { NavigationView {
RequestZecView(store: RequestZec.placeholder) RequestZecView(store: RequestZec.placeholder, tokenName: "ZEC")
} }
} }

View File

@ -19,9 +19,12 @@ public struct RequestZecView: View {
@State private var keyboardVisible: Bool = false @State private var keyboardVisible: Bool = false
@FocusState private var isMemoFocused @FocusState private var isMemoFocused
let tokenName: String
public init(store: StoreOf<RequestZec>) { public init(store: StoreOf<RequestZec>, tokenName: String) {
self.store = store self.store = store
self.tokenName = tokenName
} }
public var body: some View { public var body: some View {
@ -37,13 +40,13 @@ public struct RequestZecView: View {
PrivacyBadge(store.maxPrivacy ? .max : .low) PrivacyBadge(store.maxPrivacy ? .max : .low)
.padding(.top, 26) .padding(.top, 26)
Text("Payment Request") Text(L10n.RequestZec.title)
.zFont(.medium, size: 18, style: Design.Text.tertiary) .zFont(.medium, size: 18, style: Design.Text.tertiary)
.padding(.top, 12) .padding(.top, 12)
Group { Group {
Text(store.requestedZec.decimalString()) Text(store.requestedZec.decimalString())
+ Text(" ZEC") + Text(" \(tokenName)")
.foregroundColor(Design.Text.quaternary.color) .foregroundColor(Design.Text.quaternary.color)
} }
.zFont(.semiBold, size: 56, style: Design.Text.primary) .zFont(.semiBold, size: 56, style: Design.Text.primary)
@ -55,7 +58,7 @@ public struct RequestZecView: View {
MessageEditorView( MessageEditorView(
store: store.memoStore(), store: store.memoStore(),
title: "", title: "",
placeholder: "Whats this for?" placeholder: L10n.RequestZec.whatFor
) )
.frame(minHeight: 155) .frame(minHeight: 155)
.frame(maxHeight: 300) .frame(maxHeight: 300)
@ -68,13 +71,13 @@ public struct RequestZecView: View {
} }
.padding(.vertical, 1) .padding(.vertical, 1)
ZashiButton("Request") { ZashiButton(L10n.General.request) {
store.send(.requestTapped) store.send(.requestTapped)
} }
.disabled(!store.memoState.isValid) .disabled(!store.memoState.isValid)
.padding(.bottom, keyboardVisible ? 48 : 24) .padding(.bottom, keyboardVisible ? 48 : 24)
} }
.screenTitle("Request") .screenTitle(L10n.General.request)
.zashiBack() .zashiBack()
.screenHorizontalPadding() .screenHorizontalPadding()
.applyScreenBackground() .applyScreenBackground()
@ -127,7 +130,7 @@ public struct RequestZecView: View {
#Preview { #Preview {
NavigationView { NavigationView {
RequestZecView(store: RequestZec.placeholder) RequestZecView(store: RequestZec.placeholder, tokenName: "ZEC")
} }
} }

View File

@ -33,9 +33,10 @@ public struct Scan {
public var cancelId = UUID() public var cancelId = UUID()
public var info = "" public var info = ""
public var isCameraEnabled = true
public var isTorchAvailable = false public var isTorchAvailable = false
public var isTorchOn = false public var isTorchOn = false
public var isCameraEnabled = true public var isRPFound = false
public init( public init(
info: String = "", info: String = "",
@ -77,6 +78,7 @@ public struct Scan {
case .onAppear: case .onAppear:
// reset the values // reset the values
state.isTorchOn = false state.isTorchOn = false
state.isRPFound = false
// check the torch availability // check the torch availability
state.isTorchAvailable = captureDevice.isTorchAvailable() state.isTorchAvailable = captureDevice.isTorchAvailable()
if !captureDevice.isAuthorized() { if !captureDevice.isAuthorized() {
@ -102,6 +104,10 @@ public struct Scan {
return .none return .none
case .libraryImage(let image): case .libraryImage(let image):
guard !state.isRPFound else {
return .none
}
guard let codes = qrImageDetector.check(image) else { guard let codes = qrImageDetector.check(image) else {
return .send(.scanFailed(.noQRCodeFound)) return .send(.scanFailed(.noQRCodeFound))
} }
@ -117,7 +123,8 @@ public struct Scan {
if uriParser.isValidURI(code, zcashSDKEnvironment.network.networkType) { if uriParser.isValidURI(code, zcashSDKEnvironment.network.networkType) {
return .send(.found(code.redacted)) return .send(.found(code.redacted))
} else if let data = uriParser.checkRP(code) { } else if let data = uriParser.checkRP(code) {
return .send(.foundRP(data)) state.isRPFound = true
return .send(.foundRP(data))
} else { } else {
return .send(.scanFailed(.noQRCodeFound)) return .send(.scanFailed(.noQRCodeFound))
} }
@ -141,9 +148,13 @@ public struct Scan {
) )
case .scan(let code): case .scan(let code):
guard !state.isRPFound else {
return .none
}
if uriParser.isValidURI(code.data, zcashSDKEnvironment.network.networkType) { if uriParser.isValidURI(code.data, zcashSDKEnvironment.network.networkType) {
return .send(.found(code)) return .send(.found(code))
} else if let data = uriParser.checkRP(code.data) { } else if let data = uriParser.checkRP(code.data) {
state.isRPFound = true
return .send(.foundRP(data)) return .send(.foundRP(data))
} else { } else {
return .send(.scanFailed(.invalidQRCode)) return .send(.scanFailed(.invalidQRCode))

View File

@ -40,7 +40,7 @@ public struct RequestPaymentConfirmationView: View {
HStack { HStack {
VStack(alignment: .leading, spacing: 6) { VStack(alignment: .leading, spacing: 6) {
Text("Requested By") Text(L10n.Send.RequestPayment.requestedBy)
.zFont(.medium, size: 14, style: Design.Text.tertiary) .zFont(.medium, size: 14, style: Design.Text.tertiary)
if let alias = store.alias { if let alias = store.alias {
@ -62,7 +62,7 @@ public struct RequestPaymentConfirmationView: View {
if !store.isTransparentAddress { if !store.isTransparentAddress {
if store.isAddressExpanded { if store.isAddressExpanded {
ZashiButton( ZashiButton(
"Hide", L10n.General.hide,
type: .tertiary, type: .tertiary,
infinityWidth: false, infinityWidth: false,
prefixView: prefixView:
@ -75,7 +75,7 @@ public struct RequestPaymentConfirmationView: View {
.padding(.trailing, 12) .padding(.trailing, 12)
} else { } else {
ZashiButton( ZashiButton(
"Show", L10n.General.show,
type: .tertiary, type: .tertiary,
infinityWidth: false, infinityWidth: false,
prefixView: prefixView:
@ -90,7 +90,7 @@ public struct RequestPaymentConfirmationView: View {
if store.alias == nil { if store.alias == nil {
ZashiButton( ZashiButton(
"Save", L10n.General.save,
type: .tertiary, type: .tertiary,
infinityWidth: false, infinityWidth: false,
prefixView: prefixView:
@ -109,7 +109,7 @@ public struct RequestPaymentConfirmationView: View {
if !store.message.isEmpty { if !store.message.isEmpty {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text("For:") Text(L10n.Send.RequestPayment.for)
.zFont(.medium, size: 14, style: Design.Text.tertiary) .zFont(.medium, size: 14, style: Design.Text.tertiary)
HStack { HStack {
@ -148,7 +148,7 @@ public struct RequestPaymentConfirmationView: View {
.padding(.bottom, 20) .padding(.bottom, 20)
HStack { HStack {
Text("Total") Text(L10n.Send.RequestPayment.total)
.zFont(.medium, size: 14, style: Design.Text.tertiary) .zFont(.medium, size: 14, style: Design.Text.tertiary)
Spacer() Spacer()
@ -204,7 +204,7 @@ public struct RequestPaymentConfirmationView: View {
} }
} }
.onAppear { store.send(.onAppear) } .onAppear { store.send(.onAppear) }
.screenTitle("PAYMENT REQUEST") .screenTitle(L10n.Send.RequestPayment.title.uppercased())
} }
.navigationBarBackButtonHidden() .navigationBarBackButtonHidden()
.padding(.vertical, 1) .padding(.vertical, 1)

View File

@ -212,7 +212,7 @@ public struct SendFlow {
case resetForm case resetForm
case reviewPressed case reviewPressed
case scan(Scan.Action) case scan(Scan.Action)
case sendFailed(ZcashError) case sendFailed(ZcashError, Confirmation)
case syncAmounts(Bool) case syncAmounts(Bool)
case updateDestination(SendFlow.State.Destination?) case updateDestination(SendFlow.State.Destination?)
case walletBalances(WalletBalances.Action) case walletBalances(WalletBalances.Action)
@ -307,7 +307,7 @@ public struct SendFlow {
case .value(let rate), .refreshEnable(let rate): case .value(let rate), .refreshEnable(let rate):
if let rate { if let rate {
state.currencyConversion = CurrencyConversion(.usd, ratio: rate.rate.doubleValue, timestamp: rate.date.timeIntervalSince1970) state.currencyConversion = CurrencyConversion(.usd, ratio: rate.rate.doubleValue, timestamp: rate.date.timeIntervalSince1970)
return .send(.syncAmounts(false)) return .send(.syncAmounts(true))
} }
case .stale: case .stale:
state.currencyConversion = nil state.currencyConversion = nil
@ -337,13 +337,17 @@ public struct SendFlow {
await send(.proposal(proposal)) await send(.proposal(proposal))
await send(.confirmationRequired(confirmationType)) await send(.confirmationRequired(confirmationType))
} catch { } catch {
await send(.sendFailed(error.toZcashError())) await send(.sendFailed(error.toZcashError(), confirmationType))
} }
} }
case .sendFailed(let error): case let .sendFailed(error, confirmationType):
state.alert = AlertState.sendFailure(error) if confirmationType == .requestPayment {
return .none return .send(.updateDestination(nil))
} else {
state.alert = AlertState.sendFailure(error)
return .none
}
case .confirmationRequired: case .confirmationRequired:
return .none return .none

View File

@ -225,7 +225,7 @@ public struct SendFlowView: View {
.zImage(size: 20, style: Design.Text.lightSupport) .zImage(size: 20, style: Design.Text.lightSupport)
.padding(.trailing, 12) .padding(.trailing, 12)
Text("Add contact by tapping on Address Book icon.") Text(L10n.Send.addressNotInBook)
.zFont(.medium, size: 14, style: Design.Text.light) .zFont(.medium, size: 14, style: Design.Text.light)
.padding(.top, 2) .padding(.top, 2)
.lineLimit(1) .lineLimit(1)
@ -241,37 +241,6 @@ public struct SendFlowView: View {
} }
.frame(width: geometry.size.width - 48) .frame(width: geometry.size.width - 48)
.offset(x: 24, y: geometry[$0].minY + geometry[$0].height - 16) .offset(x: 24, y: geometry[$0].minY + geometry[$0].height - 16)
// VStack(spacing: 0) {
// Asset.Assets.Icons.user.image
// .zImage(size: 20, style: Design.Text.primary)
//
// Text(L10n.Send.addressNotInBook)
// .zFont(.semiBold, size: 18, style: Design.Text.primary)
// .padding(.top, 8)
//
// ZashiButton(
// L10n.AddressBook.addNewContact,
// type: .tertiary,
// infinityWidth: false
// ) {
// store.send(.addNewContactTapped(store.address))
// }
// .padding(.top, 16)
// }
// .padding(32)
// .frame(width: geometry.size.width - 48)
// .background {
// RoundedRectangle(cornerRadius: 10)
// .fill(Design.Surfaces.bgPrimary.color)
// .background {
// RoundedRectangle(cornerRadius: 10)
// .stroke(Design.Surfaces.strokePrimary.color)
// }
// }
// .offset(x: 24, y: geometry[$0].minY + geometry[$0].height - 18)
} }
} }
} }

View File

@ -145,31 +145,46 @@ public struct TabsView: View {
.navigationLinkEmpty( .navigationLinkEmpty(
isActive: store.bindingForStackMaxPrivacy(.zecKeyboard), isActive: store.bindingForStackMaxPrivacy(.zecKeyboard),
destination: { destination: {
ZecKeyboardView(store: store.zecKeyboardStore()) ZecKeyboardView(
.navigationLinkEmpty( store: store.zecKeyboardStore(),
isActive: store.bindingForStackMaxPrivacy(.requestZec), tokenName: tokenName
destination: { )
RequestZecView(store: store.requestZecStore()) .navigationLinkEmpty(
.navigationLinkEmpty( isActive: store.bindingForStackMaxPrivacy(.requestZec),
isActive: store.bindingForStackMaxPrivacy(.requestZecSummary), destination: {
destination: { RequestZecView(
RequestZecSummaryView(store: store.requestZecStore()) store: store.requestZecStore(),
} tokenName: tokenName
)
.navigationLinkEmpty(
isActive: store.bindingForStackMaxPrivacy(.requestZecSummary),
destination: {
RequestZecSummaryView(
store: store.requestZecStore(),
tokenName: tokenName
) )
} }
) )
}
)
} }
) )
.navigationLinkEmpty( .navigationLinkEmpty(
isActive: store.bindingForStackLowPrivacy(.zecKeyboard), isActive: store.bindingForStackLowPrivacy(.zecKeyboard),
destination: { destination: {
ZecKeyboardView(store: store.zecKeyboardStore()) ZecKeyboardView(
.navigationLinkEmpty( store: store.zecKeyboardStore(),
isActive: store.bindingForStackLowPrivacy(.requestZecSummary), tokenName: tokenName
destination: { )
RequestZecSummaryView(store: store.requestZecStore()) .navigationLinkEmpty(
} isActive: store.bindingForStackLowPrivacy(.requestZecSummary),
) destination: {
RequestZecSummaryView(
store: store.requestZecStore(),
tokenName: tokenName
)
}
)
} }
) )
.navigationLinkEmpty( .navigationLinkEmpty(

View File

@ -16,8 +16,11 @@ import Utils
public struct ZecKeyboardView: View { public struct ZecKeyboardView: View {
@Perception.Bindable var store: StoreOf<ZecKeyboard> @Perception.Bindable var store: StoreOf<ZecKeyboard>
public init(store: StoreOf<ZecKeyboard>) { let tokenName: String
public init(store: StoreOf<ZecKeyboard>, tokenName: String) {
self.store = store self.store = store
self.tokenName = tokenName
} }
public var body: some View { public var body: some View {
@ -30,7 +33,7 @@ public struct ZecKeyboardView: View {
.zImage(size: 20, style: Design.Utility.WarningYellow._500) .zImage(size: 20, style: Design.Utility.WarningYellow._500)
.padding(.trailing, 12) .padding(.trailing, 12)
Text("This transaction amount is invalid.") Text(L10n.ZecKeyboard.invalid)
.zFont(.medium, size: 14, style: Design.Utility.WarningYellow._700) .zFont(.medium, size: 14, style: Design.Utility.WarningYellow._700)
.padding(.top, 3) .padding(.top, 3)
} }
@ -42,7 +45,7 @@ public struct ZecKeyboardView: View {
HStack(spacing: 0) { HStack(spacing: 0) {
if store.isInputInZec { if store.isInputInZec {
Text(store.humanReadableMainInput) Text(store.humanReadableMainInput)
+ Text(" ZEC") + Text(" \(tokenName)")
.foregroundColor(Design.Text.quaternary.color) .foregroundColor(Design.Text.quaternary.color)
} else { } else {
if store.isCurrencySymbolPrefix { if store.isCurrencySymbolPrefix {
@ -82,7 +85,7 @@ public struct ZecKeyboardView: View {
} }
} else { } else {
Text(store.humanReadableConvertedInput) Text(store.humanReadableConvertedInput)
+ Text(" ZEC") + Text(" \(tokenName)")
.foregroundColor(Design.Text.quaternary.color) .foregroundColor(Design.Text.quaternary.color)
} }
} }
@ -150,7 +153,7 @@ public struct ZecKeyboardView: View {
.padding(.bottom, 24) .padding(.bottom, 24)
} }
ZashiButton("Next") { ZashiButton(L10n.General.next) {
store.send(.nextTapped) store.send(.nextTapped)
} }
.disabled(store.isNextButtonDisabled) .disabled(store.isNextButtonDisabled)
@ -161,13 +164,13 @@ public struct ZecKeyboardView: View {
} }
.applyScreenBackground() .applyScreenBackground()
.zashiBack() .zashiBack()
.screenTitle("Request") .screenTitle(L10n.General.request)
} }
} }
#Preview { #Preview {
NavigationView { NavigationView {
ZecKeyboardView(store: ZecKeyboard.placeholder) ZecKeyboardView(store: ZecKeyboard.placeholder, tokenName: "ZEC")
} }
} }

View File

@ -71,6 +71,16 @@ public enum L10n {
public static let title = L10n.tr("Localizable", "addressBook.newContact.title", fallback: "Add New Address") public static let title = L10n.tr("Localizable", "addressBook.newContact.title", fallback: "Add New Address")
} }
} }
public enum AddressDetails {
/// Copy Address
public static let copyAddress = L10n.tr("Localizable", "addressDetails.copyAddress", fallback: "Copy Address")
/// Hi, scan this QR code to send me a ZEC payment!
public static let shareDesc = L10n.tr("Localizable", "addressDetails.shareDesc", fallback: "Hi, scan this QR code to send me a ZEC payment!")
/// Share QR Code
public static let shareQR = L10n.tr("Localizable", "addressDetails.shareQR", fallback: "Share QR Code")
/// My Zashi ZEC Address
public static let shareTitle = L10n.tr("Localizable", "addressDetails.shareTitle", fallback: "My Zashi ZEC Address")
}
public enum Balance { public enum Balance {
/// Available Balance: /// Available Balance:
public static let availableTitle = L10n.tr("Localizable", "balance.availableTitle", fallback: "Available Balance:") public static let availableTitle = L10n.tr("Localizable", "balance.availableTitle", fallback: "Available Balance:")
@ -149,6 +159,16 @@ public enum L10n {
/// Currency Conversion /// Currency Conversion
public static let title = L10n.tr("Localizable", "currencyConversion.title", fallback: "Currency Conversion") public static let title = L10n.tr("Localizable", "currencyConversion.title", fallback: "Currency Conversion")
} }
public enum DeeplinkWarning {
/// Rescan in Zashi
public static let cta = L10n.tr("Localizable", "deeplinkWarning.cta", fallback: "Rescan in Zashi")
/// For better safety and security, rescan the QR code with Zashi.
public static let desc = L10n.tr("Localizable", "deeplinkWarning.desc", fallback: "For better safety and security, rescan the QR code with Zashi.")
/// HELLO!
public static let screenTitle = L10n.tr("Localizable", "deeplinkWarning.screenTitle", fallback: "HELLO!")
/// Looks like you used a third-party app to scan for payment.
public static let title = L10n.tr("Localizable", "deeplinkWarning.title", fallback: "Looks like you used a third-party app to scan for payment.")
}
public enum DeleteWallet { public enum DeleteWallet {
/// Delete /// Delete
public static let actionButtonTitle = L10n.tr("Localizable", "deleteWallet.actionButtonTitle", fallback: "Delete") public static let actionButtonTitle = L10n.tr("Localizable", "deleteWallet.actionButtonTitle", fallback: "Delete")
@ -182,6 +202,8 @@ public enum L10n {
public static let close = L10n.tr("Localizable", "general.close", fallback: "Close") public static let close = L10n.tr("Localizable", "general.close", fallback: "Close")
/// Confirm /// Confirm
public static let confirm = L10n.tr("Localizable", "general.confirm", fallback: "Confirm") public static let confirm = L10n.tr("Localizable", "general.confirm", fallback: "Confirm")
/// Copied to the clipboard!
public static let copiedToTheClipboard = L10n.tr("Localizable", "general.copiedToTheClipboard", fallback: "Copied to the clipboard!")
/// Delete /// Delete
public static let delete = L10n.tr("Localizable", "general.delete", fallback: "Delete") public static let delete = L10n.tr("Localizable", "general.delete", fallback: "Delete")
/// Done /// Done
@ -190,6 +212,8 @@ public enum L10n {
public static func fee(_ p1: Any) -> String { public static func fee(_ p1: Any) -> String {
return L10n.tr("Localizable", "general.fee", String(describing: p1), fallback: "Typical Fee < %@") return L10n.tr("Localizable", "general.fee", String(describing: p1), fallback: "Typical Fee < %@")
} }
/// Hide
public static let hide = L10n.tr("Localizable", "general.hide", fallback: "Hide")
/// ///
public static let hideBalancesLeast = L10n.tr("Localizable", "general.hideBalancesLeast", fallback: "") public static let hideBalancesLeast = L10n.tr("Localizable", "general.hideBalancesLeast", fallback: "")
/// ----- /// -----
@ -206,10 +230,14 @@ public enum L10n {
public static let no = L10n.tr("Localizable", "general.no", fallback: "No") public static let no = L10n.tr("Localizable", "general.no", fallback: "No")
/// Ok /// Ok
public static let ok = L10n.tr("Localizable", "general.ok", fallback: "Ok") public static let ok = L10n.tr("Localizable", "general.ok", fallback: "Ok")
/// Request
public static let request = L10n.tr("Localizable", "general.request", fallback: "Request")
/// Save /// Save
public static let save = L10n.tr("Localizable", "general.save", fallback: "Save") public static let save = L10n.tr("Localizable", "general.save", fallback: "Save")
/// Send /// Send
public static let send = L10n.tr("Localizable", "general.send", fallback: "Send") public static let send = L10n.tr("Localizable", "general.send", fallback: "Send")
/// Show
public static let show = L10n.tr("Localizable", "general.show", fallback: "Show")
/// Success /// Success
public static let success = L10n.tr("Localizable", "general.success", fallback: "Success") public static let success = L10n.tr("Localizable", "general.success", fallback: "Success")
/// Tap to copy /// Tap to copy
@ -340,14 +368,26 @@ public enum L10n {
public enum Receive { public enum Receive {
/// Copy /// Copy
public static let copy = L10n.tr("Localizable", "receive.copy", fallback: "Copy") public static let copy = L10n.tr("Localizable", "receive.copy", fallback: "Copy")
/// QR Code
public static let qrCode = L10n.tr("Localizable", "receive.qrCode", fallback: "QR Code")
/// Request
public static let request = L10n.tr("Localizable", "receive.request", fallback: "Request")
/// Sapling Address /// Sapling Address
public static let sa = L10n.tr("Localizable", "receive.sa", fallback: "Sapling Address") public static let sa = L10n.tr("Localizable", "receive.sa", fallback: "Sapling Address")
/// Share /// Zcash Sapling Address
public static let share = L10n.tr("Localizable", "receive.share", fallback: "Share") public static let saplingAddress = L10n.tr("Localizable", "receive.saplingAddress", fallback: "Zcash Sapling Address")
/// Zcash Shielded Address
public static let shieldedAddress = L10n.tr("Localizable", "receive.shieldedAddress", fallback: "Zcash Shielded Address")
/// Transparent Address /// Transparent Address
public static let ta = L10n.tr("Localizable", "receive.ta", fallback: "Transparent Address") public static let ta = L10n.tr("Localizable", "receive.ta", fallback: "Transparent Address")
/// Receive Zcash
public static let title = L10n.tr("Localizable", "receive.title", fallback: "Receive Zcash")
/// Zcash Transparent Address
public static let transparentAddress = L10n.tr("Localizable", "receive.transparentAddress", fallback: "Zcash Transparent Address")
/// Unified Address /// Unified Address
public static let ua = L10n.tr("Localizable", "receive.ua", fallback: "Unified Address") public static let ua = L10n.tr("Localizable", "receive.ua", fallback: "Unified Address")
/// Prioritize using your shielded address for maximum privacy.
public static let warning = L10n.tr("Localizable", "receive.warning", fallback: "Prioritize using your shielded address for maximum privacy.")
public enum Error { public enum Error {
/// could not extract sapling receiver from UA /// could not extract sapling receiver from UA
public static let cantExtractSaplingAddress = L10n.tr("Localizable", "receive.error.cantExtractSaplingAddress", fallback: "could not extract sapling receiver from UA") public static let cantExtractSaplingAddress = L10n.tr("Localizable", "receive.error.cantExtractSaplingAddress", fallback: "could not extract sapling receiver from UA")
@ -385,6 +425,22 @@ public enum L10n {
public static let wroteItDown = L10n.tr("Localizable", "recoveryPhraseDisplay.button.wroteItDown", fallback: "I've saved it") public static let wroteItDown = L10n.tr("Localizable", "recoveryPhraseDisplay.button.wroteItDown", fallback: "I've saved it")
} }
} }
public enum RequestZec {
/// Payment Request
public static let title = L10n.tr("Localizable", "requestZec.title", fallback: "Payment Request")
/// Whats this for?
public static let whatFor = L10n.tr("Localizable", "requestZec.whatFor", fallback: "Whats this for?")
public enum Summary {
/// Hi, I have generated a ZEC payment request for you using the Zashi app!
public static let shareDesc = L10n.tr("Localizable", "requestZec.summary.shareDesc", fallback: "Hi, I have generated a ZEC payment request for you using the Zashi app!")
/// (download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)
public static let shareMsg = L10n.tr("Localizable", "requestZec.summary.shareMsg", fallback: "(download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)")
/// Share QR Code
public static let shareQR = L10n.tr("Localizable", "requestZec.summary.shareQR", fallback: "Share QR Code")
/// Request ZEC
public static let shareTitle = L10n.tr("Localizable", "requestZec.summary.shareTitle", fallback: "Request ZEC")
}
}
public enum RestoreInfo { public enum RestoreInfo {
/// Got it! /// Got it!
public static let gotIt = L10n.tr("Localizable", "restoreInfo.gotIt", fallback: "Got it!") public static let gotIt = L10n.tr("Localizable", "restoreInfo.gotIt", fallback: "Got it!")
@ -575,8 +631,8 @@ public enum L10n {
public static let warningD = L10n.tr("Localizable", "securityWarning.warningD", fallback: ": Crash reports might reveal the timing of the crash and what events occurred, but do not reveal spending or viewing keys.") public static let warningD = L10n.tr("Localizable", "securityWarning.warningD", fallback: ": Crash reports might reveal the timing of the crash and what events occurred, but do not reveal spending or viewing keys.")
} }
public enum Send { public enum Send {
/// Address not in Address Book /// Add contact by tapping on Address Book icon.
public static let addressNotInBook = L10n.tr("Localizable", "send.addressNotInBook", fallback: "Address not in Address Book") public static let addressNotInBook = L10n.tr("Localizable", "send.addressNotInBook", fallback: "Add contact by tapping on Address Book icon.")
/// Zcash Address /// Zcash Address
public static let addressPlaceholder = L10n.tr("Localizable", "send.addressPlaceholder", fallback: "Zcash Address") public static let addressPlaceholder = L10n.tr("Localizable", "send.addressPlaceholder", fallback: "Zcash Address")
/// Amount /// Amount
@ -625,6 +681,16 @@ public enum L10n {
/// Transparent transactions cant have memos /// Transparent transactions cant have memos
public static let memo = L10n.tr("Localizable", "send.info.memo", fallback: "Transparent transactions cant have memos") public static let memo = L10n.tr("Localizable", "send.info.memo", fallback: "Transparent transactions cant have memos")
} }
public enum RequestPayment {
/// For:
public static let `for` = L10n.tr("Localizable", "send.requestPayment.for", fallback: "For:")
/// Requested By
public static let requestedBy = L10n.tr("Localizable", "send.requestPayment.requestedBy", fallback: "Requested By")
/// Payment Request
public static let title = L10n.tr("Localizable", "send.requestPayment.title", fallback: "Payment Request")
/// Total
public static let total = L10n.tr("Localizable", "send.requestPayment.total", fallback: "Total")
}
} }
public enum ServerSetup { public enum ServerSetup {
/// Active /// Active
@ -848,6 +914,10 @@ public enum L10n {
return L10n.tr("Localizable", "whatsNew.version", String(describing: p1), fallback: "Zashi Version %@") return L10n.tr("Localizable", "whatsNew.version", String(describing: p1), fallback: "Zashi Version %@")
} }
} }
public enum ZecKeyboard {
/// This transaction amount is invalid.
public static let invalid = L10n.tr("Localizable", "zecKeyboard.invalid", fallback: "This transaction amount is invalid.")
}
} }
// swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length // swiftlint:enable explicit_type_interface function_parameter_count identifier_name line_length
// swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces // swiftlint:enable nesting type_body_length type_name vertical_whitespace_opening_braces

View File

@ -66,16 +66,36 @@
"home.migratingDatabases" = "Upgrading databases…"; "home.migratingDatabases" = "Upgrading databases…";
// MARK: - Address Details // MARK: - Address Details
"addressDetails.shareTitle" = "My Zashi ZEC Address";
"addressDetails.shareDesc" = "Hi, scan this QR code to send me a ZEC payment!";
"addressDetails.shareQR" = "Share QR Code";
"addressDetails.copyAddress" = "Copy Address";
// MARK: - Request ZEC
"requestZec.title" = "Payment Request";
"requestZec.whatFor" = "Whats this for?";
"requestZec.summary.shareQR" = "Share QR Code";
"requestZec.summary.shareTitle" = "Request ZEC";
"requestZec.summary.shareDesc" = "Hi, I have generated a ZEC payment request for you using the Zashi app!";
"requestZec.summary.shareMsg" = "(download link: https://apps.apple.com/app/zashi-zcash-wallet/id1672392439)";
// MARK: - Receive
"receive.ua" = "Unified Address"; "receive.ua" = "Unified Address";
"receive.sa" = "Sapling Address"; "receive.sa" = "Sapling Address";
"receive.ta" = "Transparent Address"; "receive.ta" = "Transparent Address";
"receive.copy" = "Copy";
"receive.share" = "Share";
"receive.error.cantExtractUnifiedAddress" = "could not extract UA"; "receive.error.cantExtractUnifiedAddress" = "could not extract UA";
"receive.error.cantExtractTransparentAddress" = "could not extract transparent receiver from UA"; "receive.error.cantExtractTransparentAddress" = "could not extract transparent receiver from UA";
"receive.error.cantExtractSaplingAddress" = "could not extract sapling receiver from UA"; "receive.error.cantExtractSaplingAddress" = "could not extract sapling receiver from UA";
"receive.title" = "Receive Zcash";
"receive.warning" = "Prioritize using your shielded address for maximum privacy.";
"receive.shieldedAddress" = "Zcash Shielded Address";
"receive.transparentAddress" = "Zcash Transparent Address";
"receive.saplingAddress" = "Zcash Sapling Address";
"receive.copy" = "Copy";
"receive.qrCode" = "QR Code";
"receive.request" = "Request";
// MARK: - Address Details // MARK: - Server Setup
"serverSetup.title" = "Server"; "serverSetup.title" = "Server";
"serverSetup.custom" = "custom server"; "serverSetup.custom" = "custom server";
"serverSetup.default" = "Default"; "serverSetup.default" = "Default";
@ -122,7 +142,7 @@
"send.error.invalidAmount" = "Invalid amount"; "send.error.invalidAmount" = "Invalid amount";
"send.error.invalidAddress" = "Invalid address"; "send.error.invalidAddress" = "Invalid address";
"send.info.memo" = "Transparent transactions cant have memos"; "send.info.memo" = "Transparent transactions cant have memos";
"send.addressNotInBook" = "Address not in Address Book"; "send.addressNotInBook" = "Add contact by tapping on Address Book icon.";
"send.amountSummary" = "Total Amount"; "send.amountSummary" = "Total Amount";
"send.amount" = "Amount"; "send.amount" = "Amount";
"send.toSummary" = "Sending to"; "send.toSummary" = "Sending to";
@ -135,6 +155,13 @@
"send.alert.failure.message" = "Error: %@"; "send.alert.failure.message" = "Error: %@";
"send.addressPlaceholder" = "Zcash Address"; "send.addressPlaceholder" = "Zcash Address";
"send.currencyPlaceholder" = "USD"; "send.currencyPlaceholder" = "USD";
"send.requestPayment.requestedBy" = "Requested By";
"send.requestPayment.for" = "For:";
"send.requestPayment.total" = "Total";
"send.requestPayment.title" = "Payment Request";
// MARK: - ZEC Keyboard
"zecKeyboard.invalid" = "This transaction amount is invalid.";
// MARK: - Delete Wallet // MARK: - Delete Wallet
"deleteWallet.title" = "Delete Zashi"; "deleteWallet.title" = "Delete Zashi";
@ -215,6 +242,9 @@ Sharing this private data is irrevocable — once you have shared this private d
"general.confirm" = "Confirm"; "general.confirm" = "Confirm";
"general.done" = "Done"; "general.done" = "Done";
"general.save" = "Save"; "general.save" = "Save";
"general.request" = "Request";
"general.hide" = "Hide";
"general.show" = "Show";
"balance.availableTitle" = "Available Balance:"; "balance.availableTitle" = "Available Balance:";
"qrCodeFor" = "QR Code for %@"; "qrCodeFor" = "QR Code for %@";
"general.tapToCopy" = "Tap to copy"; "general.tapToCopy" = "Tap to copy";
@ -226,6 +256,7 @@ Sharing this private data is irrevocable — once you have shared this private d
"general.alert.continue" = "Continue"; "general.alert.continue" = "Continue";
"general.alert.caution" = "Heads up"; "general.alert.caution" = "Heads up";
"general.alert.ignore" = "Ignore"; "general.alert.ignore" = "Ignore";
"general.copiedToTheClipboard" = "Copied to the clipboard!";
// MARK: - Wallet Status // MARK: - Wallet Status
"walletStatus.restoringWallet" = "RESTORING YOUR WALLET…"; "walletStatus.restoringWallet" = "RESTORING YOUR WALLET…";
@ -353,6 +384,12 @@ Sharing this private data is irrevocable — once you have shared this private d
"currencyConversion.refreshDesc" = "The rate is refreshed automatically and can also be refreshed manually."; "currencyConversion.refreshDesc" = "The rate is refreshed automatically and can also be refreshed manually.";
"currencyConversion.skipBtn" = "Skip for now"; "currencyConversion.skipBtn" = "Skip for now";
// MARK: - Deeplink Warning
"deeplinkWarning.title" = "Looks like you used a third-party app to scan for payment.";
"deeplinkWarning.desc" = "For better safety and security, rescan the QR code with Zashi.";
"deeplinkWarning.cta" = "Rescan in Zashi";
"deeplinkWarning.screenTitle" = "Hello!";
// MARK: - Tooltips // MARK: - Tooltips
"tooltip.exchangeRate.title" = "Exchange rate unavailable"; "tooltip.exchangeRate.title" = "Exchange rate unavailable";
"tooltip.exchangeRate.desc" = "We tried but we couldnt refresh the exchange rate for you. Check your connection, relaunch the app, and well try again."; "tooltip.exchangeRate.desc" = "We tried but we couldnt refresh the exchange rate for you. Check your connection, relaunch the app, and well try again.";

View File

@ -2020,7 +2020,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements"; CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2; CURRENT_PROJECT_VERSION = 5;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
DEVELOPMENT_TEAM = RLPRR8CPQG; DEVELOPMENT_TEAM = RLPRR8CPQG;
@ -2061,7 +2061,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements"; CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2; CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
DEVELOPMENT_TEAM = RLPRR8CPQG; DEVELOPMENT_TEAM = RLPRR8CPQG;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
@ -2263,7 +2263,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements"; CODE_SIGN_ENTITLEMENTS = "secant-distrib.entitlements";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 2; CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"secant/Preview Content\"";
DEVELOPMENT_TEAM = RLPRR8CPQG; DEVELOPMENT_TEAM = RLPRR8CPQG;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;

View File

@ -356,8 +356,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-http2.git", "location" : "https://github.com/apple/swift-nio-http2.git",
"state" : { "state" : {
"revision" : "b5f7062b60e4add1e8c343ba4eb8da2e324b3a94", "revision" : "eaa71bb6ae082eee5a07407b1ad0cbd8f48f9dca",
"version" : "1.34.0" "version" : "1.34.1"
} }
}, },
{ {
@ -374,8 +374,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-nio-transport-services.git", "location" : "https://github.com/apple/swift-nio-transport-services.git",
"state" : { "state" : {
"revision" : "38ac8221dd20674682148d6451367f89c2652980", "revision" : "dbace16f126fdcd80d58dc54526c561ca17327d7",
"version" : "1.21.0" "version" : "1.22.0"
} }
}, },
{ {
@ -471,10 +471,10 @@
{ {
"identity" : "zcash-light-client-ffi", "identity" : "zcash-light-client-ffi",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/Electric-Coin-Company/zcash-light-client-ffi", "location" : "https://github.com/zcash-hackworks/zcash-light-client-ffi",
"state" : { "state" : {
"revision" : "be1575f8d2dce5b7502448ef1f8619e2ca9359d9", "revision" : "8ed5b08d59ff5e7e11240be29b084dedbdf2f268",
"version" : "0.10.0" "version" : "0.9.1"
} }
}, },
{ {
@ -491,8 +491,8 @@
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk", "location" : "https://github.com/Electric-Coin-Company/zcash-swift-wallet-sdk",
"state" : { "state" : {
"revision" : "e2ce60ef245e3d672b0703a0fbf1d4ed31eaa16c", "revision" : "af9383b419c2cafe37ac9edecf9d41cf37fbbf45",
"version" : "2.2.4" "version" : "2.2.3"
} }
} }
], ],