Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: ios deliver #541

Merged
merged 21 commits into from
Dec 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/beta_version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ jobs:
distribute_android:
if: ${{ github.event.inputs.platform == 'android' || github.event.inputs.platform == 'both' }}
uses: ./.github/workflows/distribute.yml
needs: tests
with:
backend-url: ${{ vars.PUBLIC_BACKEND_URL }}
lane: beta
Expand All @@ -30,8 +29,8 @@ jobs:

distribute_ios:
runs-on: macOS-latest
environment: ios
if: ${{ github.event.inputs.platform == 'ios' || github.event.inputs.platform == 'both' }}
needs: tests
steps:
- uses: dyne/pnpm@main
with:
Expand Down
92 changes: 51 additions & 41 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
Expand Up @@ -178,9 +178,9 @@ platform :ios do

begin
setup_signing(keychain_info)
bump_build_number
build_num, new_version = bump_build_number_and_version
build_app_with_signing(keychain_info)
deliver
deliver_production(build_number: build_num, new_version: new_version)
ensure
cleanup_keychain(keychain_info)
end
Expand All @@ -190,7 +190,7 @@ platform :ios do

begin
setup_signing(keychain_info)
bump_build_number
bump_build_number_and_version
build_app_with_signing(keychain_info)
submit_to_testflight
ensure
Expand All @@ -212,30 +212,40 @@ platform :ios do
update_project_settings
end

lane :bump_build_number do
file = File.read('../package.json')
data_hash = JSON.parse(file)
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: Base64.decode64(ENV['APPLE_KEY_CONTENT']),
duration: 1200,
in_house: false
)
build_num = app_store_build_number(
api_key: api_key,
app_identifier: ENV['BUNDLE_IDENTIFIER'],
live: false,
initial_build_number:"2"
)
build_num = build_num + 1
UI.message("Bumped build number to #{build_num}")
increment_build_number(
build_number: build_num,
xcodeproj: "./ios/App/App.xcodeproj",
skip_info_plist: true
)
end
lane :bump_build_number_and_version do
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: Base64.decode64(ENV['APPLE_KEY_CONTENT']),
duration: 1200,
in_house: false
)
build_num = app_store_build_number(
api_key: api_key,
app_identifier: ENV['BUNDLE_IDENTIFIER'],
live: false,
initial_build_number: "2"
)
build_num += 1
UI.message("Bumped build number to #{build_num}")
increment_build_number(
build_number: build_num,
xcodeproj: "./ios/App/App.xcodeproj",
skip_info_plist: true
)
package = load_json(json_path: "./package.json")
new_version = package["version"]
UI.message("Updating app version to #{new_version}")
info_plist_path = "./ios/App/App/Info.plist"
set_info_plist_value(
path: info_plist_path,
key: "CFBundleShortVersionString",
value: new_version
)

[build_num, new_version]
end


private_lane :import_cert do |options|
cert_path = "#{Dir.tmpdir}/build_certificate.p12"
Expand Down Expand Up @@ -311,14 +321,7 @@ platform :ios do
duration: 1200,
in_house: false
)
# pilot(
# api_key: api_key,
# skip_waiting_for_build_processing: true,
# skip_submission: true,
# distribute_external: false,
# notify_external_testers: false,
# ipa: "./App.ipa"
# )

changelog = read_changelog
upload_to_testflight(
api_key: api_key,
Expand All @@ -327,10 +330,9 @@ platform :ios do
demo_account_required: true,
distribute_external:true,
changelog: changelog
# notify_external_testers: true
)
end
private_lane :deliver_production do
private_lane :deliver_production do |options|
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
Expand All @@ -339,18 +341,26 @@ platform :ios do
in_house: false
)
changelog = read_changelog
deliver(
pilot(
api_key: api_key,
skip_binary_upload: true,
force: true,
ipa: "./App.ipa",
skip_waiting_for_build_processing: true,
demo_account_required: true,
distribute_external:true,
changelog: changelog,
app_version: options["new_version"]
)
deliver(
build_number: options[:build_num],
app_version: options["new_version"],
app_review_attachment_file: './fastlane/metadata/iphone-login.mp4',
submit_for_review:true,
api_key: api_key,
force: true,
skip_binary_upload: true,
metadata_path: "./fastlane/metadata/ios",
precheck_include_in_app_purchases: false,
skip_screenshots: true,
# ignore_language_directory_validation: true,
app_review_information: ({
demo_user: DEMO_USER,
demo_password: DEMO_PASSWORD
Expand Down
22 changes: 10 additions & 12 deletions fastlane/metadata/ios/en-GB/description.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
The DIDroom Wallet is a component of DIDroom, an open-source multiplatform and multifunctional Identity DID/SSI wallet, compliant with the W3C-DID, standards and eIDAS 2.0 (based on the EUDI-ARF specifications). Credential issuers and verification is configured using a no-code approach.
The DIDroom Wallet is a component of DIDroom, an open-source multiplatform and multifunctional Identity DID/SSI wallet, compliant with EUDI-ARF and W3C-VC specifications.

Selected features:
- SD-JWT: supports eIDAS 2.0 (EUDI-ARF)
- WC-DID: supports the industrial standards W3C-DID .
- OpenID4VCI and OpenID4VP: supports the protocols used by the EUDIW developers
- Zero knowledge proof: supports issue and verifications of zero knowledge proof credentials using the BBS+ and Coconut cryptographic flows.
- Trusted Execution Environment (TEE): the mobile applications (holder wallet and verifier app) support TEE for Android and and Secure Enclave for iOS, as required by the EUDI-ARF specs.
- Android/iOS easy to mantain mobile app: the mobile app, used both for holder and verifier roles, is based on Capacitor, uses minimal platform specific code (e.g. for Trusted Execution Environment).

The DIDroom platform offers:

- Microservice based issuing and verification: the admin dashboard allows you to plug external microservices for issuance and verification including the Authorization Server, Credential Issuer and Relying party. The external service can be based on Zenswarm, so each service has its own DID/Identity and its issuance/verification flows are programmable in Zencode, or be based on a 3rd party’s technology.
- SD-JWT: supports for EUDI-ARF (eIDAS 2.0)
- WC-DID: supports the industrial standards W3C-DID and W3C-VC.
- OpenID4VCI and OpenID4VP: supports the protocols used in the EUDI-wallet
- Zero knowledge proof: supports issue and verifications of zero knowledge proof credentials using the BBS and Coconut cryptographic flows.
- Secure Enclave: secret keys and credentials are stored in iOS' Secure Enclave.

- Granular ACL: the the admin dashboard enables the admin to assign multiple roles to different users, allowing them to setup issueing and verification services with different capabilities
The DIDroom platform offers:

https://didroom.com
Microservice based issuing and verification: the DIDroom dashboard allows you to provision and deploy microservices for issuance and verification (Authorization Server, Credential Issuer and Relying party). Each microservice has its own W3C-DID/Identity and its issuance/verification flows are programmable in Zencode, or be based on a 3rd party’s technology.
Open source mobile apps: Holder Wallet and Verifier apps, based on Capacitor JS, available on github.
Granular ACL: the the admin dashboard enables the admin to assign multiple roles to different users, allowing them to setup issueing and verification services with different capabilities
33 changes: 32 additions & 1 deletion fastlane/metadata/ios/review_information/notes.txt
Original file line number Diff line number Diff line change
@@ -1 +1,32 @@
security questions answers: [p, p, p, p, p]
See the video attached to see the entire login procedure.


# Testing instructions for security question screen

## 1. Log in to the App
- Use your **username** and **password** to log in as usual.

## 2. Security Question Prompt
- After successfully logging in, you will be prompted with a screen asking you to answer **five security questions**. This step is part of the app's security procedure and is intended to verify your identity in case you forget your mnemonic phrase in the future.

## 3. Answering the Security Questions
- For the purpose of this test, all answers to the security questions will always be **'1'** (the number one).
- **Important**: You must enter the answer exactly as **'1'**. If there is any extra space before or after the '1', or if you type something other than '1', the test will fail.
- Please carefully read each question and type **'1'** exactly as shown below.

## 4. List of Security Questions and Answers
- **Question 1**: "Where did your parents meet?"
**Answer**: 1
- **Question 2**: "What is the name of your first pet?"
**Answer**: 1
- **Question 3**: "What is your hometown?"
**Answer**: 1
- **Question 4**: "What is the name of your first teacher?"
**Answer**: 1
- **Question 5**: "What was your mother's surname before marriage?"
**Answer**: 1

## 5. Important Notes
- **Critical**: Make sure that the answer is entered as **'1'** with no spaces before or after the number.
- If you type anything other than **'1'** or include any extra spaces, the test will fail.
- If you encounter any issues or have questions during the process, please let us know immediately.
Binary file added fastlane/metadata/iphone-login.mp4
Binary file not shown.
30 changes: 15 additions & 15 deletions ios/App/Podfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require_relative '../../node_modules/.pnpm/@capacitor+ios@6.1.2_@capacitor+core@6.1.2/node_modules/@capacitor/ios/scripts/pods_helpers'
require_relative '../../node_modules/.pnpm/@capacitor+ios@6.2.0_@capacitor+core@6.2.0/node_modules/@capacitor/ios/scripts/pods_helpers'

platform :ios, '13.0'
platform :ios, '15.5'
use_frameworks!

# workaround to avoid Xcode caching of Pods that requires
Expand All @@ -9,20 +9,20 @@ use_frameworks!
install! 'cocoapods', :disable_input_output_paths => true

def capacitor_pods
pod 'Capacitor', :path => '../../node_modules/.pnpm/@capacitor+ios@6.1.2_@capacitor+core@6.1.2/node_modules/@capacitor/ios'
pod 'CapacitorCordova', :path => '../../node_modules/.pnpm/@capacitor+ios@6.1.2_@capacitor+core@6.1.2/node_modules/@capacitor/ios'
pod 'Capacitor', :path => '../../node_modules/.pnpm/@capacitor+ios@6.2.0_@capacitor+core@6.2.0/node_modules/@capacitor/ios'
pod 'CapacitorCordova', :path => '../../node_modules/.pnpm/@capacitor+ios@6.2.0_@capacitor+core@6.2.0/node_modules/@capacitor/ios'
pod 'AparajitaCapacitorBiometricAuth', :path => '../../node_modules/.pnpm/@[email protected]/node_modules/@aparajita/capacitor-biometric-auth'
pod 'CapacitorMlkitBarcodeScanning', :path => '../../node_modules/.pnpm/@capacitor-mlkit+barcode-scanning@6.2.0_@capacitor+core@6.1.2/node_modules/@capacitor-mlkit/barcode-scanning'
pod 'CapacitorApp', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/app'
pod 'CapacitorCamera', :path => '../../node_modules/.pnpm/@[email protected].0_@capacitor+core@6.1.2/node_modules/@capacitor/camera'
pod 'CapacitorClipboard', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/clipboard'
pod 'CapacitorDevice', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/device'
pod 'CapacitorFilesystem', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/filesystem'
pod 'CapacitorHaptics', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/haptics'
pod 'CapacitorKeyboard', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.1.2/node_modules/@capacitor/keyboard'
pod 'CapacitorPreferences', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.1.2/node_modules/@capacitor/preferences'
pod 'CapacitorStatusBar', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.1.2/node_modules/@capacitor/status-bar'
pod 'CapacitorNativeSettings', :path => '../../node_modules/.pnpm/[email protected]_@capacitor+core@6.1.2/node_modules/capacitor-native-settings'
pod 'CapacitorMlkitBarcodeScanning', :path => '../../node_modules/.pnpm/@capacitor-mlkit+barcode-scanning@7.0.0-next.2_@capacitor+core@6.2.0/node_modules/@capacitor-mlkit/barcode-scanning'
pod 'CapacitorApp', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/app'
pod 'CapacitorCamera', :path => '../../node_modules/.pnpm/@[email protected].1_@capacitor+core@6.2.0/node_modules/@capacitor/camera'
pod 'CapacitorClipboard', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/clipboard'
pod 'CapacitorDevice', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/device'
pod 'CapacitorFilesystem', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/filesystem'
pod 'CapacitorHaptics', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/haptics'
pod 'CapacitorKeyboard', :path => '../../node_modules/.pnpm/@[email protected].3_@capacitor+core@6.2.0/node_modules/@capacitor/keyboard'
pod 'CapacitorPreferences', :path => '../../node_modules/.pnpm/@[email protected].3_@capacitor+core@6.2.0/node_modules/@capacitor/preferences'
pod 'CapacitorStatusBar', :path => '../../node_modules/.pnpm/@[email protected].2_@capacitor+core@6.2.0/node_modules/@capacitor/status-bar'
pod 'CapacitorNativeSettings', :path => '../../node_modules/.pnpm/[email protected]_@capacitor+core@6.2.0/node_modules/capacitor-native-settings'
end

target 'Didroom' do
Expand Down
Loading
Loading