Files
self/app/ios/Podfile
Justin Hernandez 8da076cf0d Bump Babel, TypeScript, React Native and assorted dependencies; refresh lockfile (#1606)
* Update dependency versions

* Fix gesture handler Android dependency (#1611)

* Patch screens codegen type (#1609)

* Downgrade Sentry React Native (#1612)

* fix patches and packages

* downgrade versions for gesture handler and screens

* agent feedback

* fix ios building

* allow ios tets to pass

* formatting

* make cache more resilient

* Address CodeRabbitAI review comments

This commit addresses all 7 unresolved CodeRabbitAI comments on PR #1606:

Patch-package error handling (comments #1, #2, #3):
- stderr capture already implemented in both root and workspace patch runs
- Add CI warning when patches fail silently instead of exiting with 0
- Log completion status in CI mode for visibility

Critical Mixpanel dependency fix (comment #5):
- Add explicit Mixpanel-swift pod declaration to fix E2E build failures
- Ensures Mixpanel is available even when NFCPassportReader is skipped during E2E testing

React-native-web validation (comment #4):
- Verified no usage of deprecated findNodeHandle, pointerEvents: 'box-none', or createPortal
- Safe to upgrade from 0.19 to 0.21.2

CI workflow improvements (comments #6, #7):
- Create cache-sdk-build composite action for consistent SDK build artifact caching
- Replace all direct actions/cache@v4 usage with cache-yarn composite action
- Replace all direct actions/cache/restore@v4 and save@v4 with cache-sdk-build
- Add nested require() validation step before tests to fail fast on problematic patterns

All changes follow repository coding guidelines for CI caching and test memory optimization.

* Extend cache composite actions to all SDK workflows

This commit extends the caching standardization from PR #1606 to include
mobile-sdk-ci.yml and core-sdk-ci.yml workflows.

New composite actions created:
- cache-mobile-sdk-build: For mobile SDK build artifacts
- cache-core-sdk-build: For core SDK build artifacts

Workflow updates:
- mobile-sdk-ci.yml: Replaced 5 instances of direct actions/cache with cache-mobile-sdk-build
- core-sdk-ci.yml: Replaced 4 instances of direct actions/cache with cache-core-sdk-build

All SDK CI workflows now use consistent caching patterns via composite actions,
following the AGENTS.md guideline: "Use shared composite actions from .github/actions
for CI caching instead of calling actions/cache directly."

Benefits:
- Consistent caching across all SDK workflows (qrcode, mobile, core)
- Centralized cache configuration - easier to maintain
- Follows established patterns from qrcode-sdk-ci.yml

* downgrade react-native-svg

* update pod lock file

* sort
2026-01-28 12:47:32 -08:00

219 lines
8.4 KiB
Ruby
Executable File

source "https://cdn.cocoapods.org/"
# Skip Sumsub configuration for E2E testing
unless ENV["E2E_TESTING"] == "1"
source "https://github.com/SumSubstance/Specs.git"
# Enable Fisherman (Device Intelligence) module
ENV["IDENSIC_WITH_FISHERMAN"] = "true"
# Enable VideoIdent module
ENV["IDENSIC_WITH_VIDEOIDENT"] = "true"
end
use_frameworks!
require "tmpdir"
# Resolve react_native_pods.rb with node to allow for hoisting
require Pod::Executable.execute_command("node", ["-p",
'require.resolve(
"react-native/scripts/react_native_pods.rb",
{paths: [process.argv[1]]},
)', __dir__]).strip
project "Self.xcodeproj"
# Define consistent iOS deployment target
IOS_DEPLOYMENT_TARGET = "15.1"
platform :ios, IOS_DEPLOYMENT_TARGET if !ENV["ACT"]
prepare_react_native_project!
flipper_enabled = ENV["NO_FLIPPER"] != "1"
flipper_config = { "Flipper" => flipper_enabled ? "~> 0.125.0" : nil }
linkage = ENV["USE_FRAMEWORKS"]
if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
use_frameworks! :linkage => linkage.to_sym
end
def using_https_git_auth?
begin
# backticks run command in shell and capture stdout, 2>&1 captures stderr as well
auth_data = `gh auth status 2>&1`
auth_data.include?("Logged in to github.com account") &&
auth_data.include?("Git operations protocol: https")
rescue => e
# Avoid printing auth-related details in CI logs.
false
end
end
target "Self" do
# Native module exclusion for E2E testing is handled in react-native.config.cjs
config = use_native_modules!
# Skip NFCPassportReader for e2e testing to avoid build issues
unless ENV["E2E_TESTING"] == "1"
# Check if we're running in a selfxyz repo or an external fork
is_selfxyz_repo = ENV["GITHUB_REPOSITORY"]&.start_with?("selfxyz/") || ENV["GITHUB_REPOSITORY"].nil?
if !is_selfxyz_repo
# External fork - use public NFCPassportReader repository (placeholder)
# TODO: Replace with actual public NFCPassportReader repository URL
nfc_repo_url = "https://github.com/PLACEHOLDER/NFCPassportReader.git"
elsif ENV["GITHUB_ACTIONS"] == "true"
# CI: NEVER embed credentials in URLs. Rely on workflow-provided auth via:
# - ~/.netrc or a Git credential helper, and token masking in logs.
nfc_repo_url = "https://github.com/selfxyz/NFCPassportReader.git"
elsif using_https_git_auth?
# Local development with HTTPS GitHub auth via gh - use HTTPS to private repo
nfc_repo_url = "https://github.com/selfxyz/NFCPassportReader.git"
else
# Local development in selfxyz repo - use SSH to private repo
nfc_repo_url = "git@github.com:selfxyz/NFCPassportReader.git"
end
pod "NFCPassportReader", git: nfc_repo_url, commit: "9eff7c4e3a9037fdc1e03301584e0d5dcf14d76b"
end
# Explicitly declare Mixpanel to ensure it's available even in E2E builds
# (NFCPassportReader also includes Mixpanel, but is skipped during E2E testing)
pod "Mixpanel-swift", :modular_headers => true
pod "QKMRZScanner"
pod "lottie-ios"
pod "SwiftQRScanner", :git => "https://github.com/vinodiOS/SwiftQRScanner"
# RNReactNativeHapticFeedback is handled by autolinking
use_react_native!(
:path => config[:reactNativePath],
:hermes_enabled => true,
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/..",
# Flipper設定は削除
)
pod "Firebase", :modular_headers => true
pod "FirebaseCore", :modular_headers => true
pod "FirebaseCoreInternal", :modular_headers => true
pod "GoogleUtilities", :modular_headers => true
pod "FirebaseMessaging"
if flipper_enabled
pod "RCT-Folly", :podspec => "#{config[:reactNativePath]}/third-party-podspecs/RCT-Folly.podspec"
end
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
if target.name == "RNZipArchive"
target.source_build_phase.files.each do |file|
if file.settings && file.settings["COMPILER_FLAGS"]
file.settings["COMPILER_FLAGS"] = ""
end
end
end
target.build_configurations.each do |config|
config.build_settings["IPHONEOS_DEPLOYMENT_TARGET"] = IOS_DEPLOYMENT_TARGET
config.build_settings["GCC_PREPROCESSOR_DEFINITIONS"] ||= ["$(inherited)", "_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION"]
end
end
end
bitcode_strip_path = `xcrun --find bitcode_strip`.chop!
def strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
framework_path = File.join(Dir.pwd, framework_relative_path)
command = "#{bitcode_strip_path} #{framework_path} -r -o #{framework_path}"
puts "Stripping bitcode: #{command}"
system(command)
end
# Only strip OpenSSL bitcode if NFCPassportReader is included (not in e2e testing)
unless ENV["E2E_TESTING"] == "1"
framework_paths = [
"Pods/OpenSSL-Universal/Frameworks/OpenSSL.xcframework/ios-arm64/OpenSSL.framework/OpenSSL",
"Pods/OpenSSL-Universal/Frameworks/OpenSSL.xcframework/ios-arm64_x86_64-maccatalyst/OpenSSL.framework/OpenSSL",
"Pods/OpenSSL-Universal/Frameworks/OpenSSL.xcframework/ios-arm64_x86_64-simulator/OpenSSL.framework/OpenSSL",
"Pods/OpenSSL-Universal/Frameworks/OpenSSL.xcframework/macos-arm64_x86_64/OpenSSL.framework/OpenSSL",
]
framework_paths.each do |framework_relative_path|
strip_bitcode_from_framework(bitcode_strip_path, framework_relative_path)
end
end
# https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
react_native_post_install(
installer,
config[:reactNativePath],
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)
installer.pods_project.targets.each do |target|
if target.name == "RNReactNativeHapticFeedback"
target.build_configurations.each do |config|
config.build_settings["OTHER_LDFLAGS"] ||= ["$(inherited)"]
config.build_settings["OTHER_LDFLAGS"] << "-framework AudioToolbox"
end
end
# Fix for React Native Sentry warnings
if target.name == "RNSentry"
target.build_configurations.each do |config|
config.build_settings["CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION"] = "NO"
config.build_settings["CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF"] = "NO"
config.build_settings["GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS"] = "NO"
end
end
end
# update QKCutoutView.swift to hide OCR border
qkCutoutView = "Pods/QKMRZScanner/QKMRZScanner/QKCutoutView.swift"
if File.exist?(qkCutoutView)
# Ensure the file is writable
system("chmod u+w #{qkCutoutView}")
text = File.read(qkCutoutView)
# Only modify if the line exists and is not already commented
if text.include?("addBorderAroundCutout()") && !text.include?("// addBorderAroundCutout()")
new_text = text.gsub(/^(\s*)(addBorderAroundCutout\s*\(\s*\))/, '\1// \2')
File.write(qkCutoutView, new_text)
end
end
# Disable code signing for Pod targets to avoid conflicts with main app signing
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["CODE_SIGNING_ALLOWED"] = "NO"
# Fix for Rosetta emulator builds - exclude arm64 for simulator
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
end
end
# Add E2E_TESTING compilation condition for main app target when environment variable is set
if ENV["E2E_TESTING"] == "1"
# Find Self.xcodeproj and add E2E_TESTING compilation condition
self_project_path = File.join(installer.sandbox.project_path, "../Self.xcodeproj")
if File.exist?(self_project_path)
project = Xcodeproj::Project.open(self_project_path)
project.targets.each do |target|
if target.name == "Self"
target.build_configurations.each do |config|
existing_conditions = config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] || ""
unless existing_conditions.to_s.include?("E2E_TESTING")
config.build_settings["SWIFT_ACTIVE_COMPILATION_CONDITIONS"] = (existing_conditions.to_s + " E2E_TESTING").strip
end
end
end
end
project.save
end
end
end
end