source "https://cdn.cocoapods.org/" 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 config = use_native_modules! use_frameworks! # 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 pod "QKMRZScanner" pod "lottie-ios" pod "SwiftQRScanner", :git => "https://github.com/vinodiOS/SwiftQRScanner" pod "Mixpanel-swift", "~> 5.0.0" # 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