misc: optimize slow cmp_shared build step in CI (#1904)

This commit is contained in:
Hekmatullah 2025-08-14 22:48:18 +01:00 committed by GitHub
parent c8e1d1ad67
commit e8b7c94565
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 275 additions and 99 deletions

17
.github/ci-gradle.properties vendored Normal file
View File

@ -0,0 +1,17 @@
# Disable daemon for CI to avoid leftover processes
org.gradle.daemon=false
# Run tasks in parallel where possible
org.gradle.parallel=true
# Increase heap and metaspace for larger builds (macOS-latest has ~7 GB available)
org.gradle.jvmargs=-Xmx7g
# Limit max workers to avoid memory pressure in CI
org.gradle.workers.max=3
# Disable Kotlin incremental compilation in CI for clean, consistent builds
kotlin.incremental=false
# Use in-process Kotlin compiler to avoid extra forked processes
kotlin.compiler.execution.strategy=in-process

View File

@ -74,15 +74,20 @@ on:
default: 'development' default: 'development'
description: 'Target branch for release' description: 'Target branch for release'
build_ios: distribute_ios_firebase:
type: boolean type: boolean
default: false default: false
description: Build iOS App description: Distribute iOS App via Firebase App Distribution
publish_ios: distribute_ios_testflight:
type: boolean type: boolean
default: false default: false
description: Publish iOS App On App Store description: Distribute iOS App via TestFlight (App Store Connect)
distribute_ios_appstore:
type: boolean
default: false
description: Distribute iOS App to Appstore
permissions: permissions:
contents: write contents: write
@ -96,17 +101,27 @@ concurrency:
jobs: jobs:
multi_platform_build_and_publish: multi_platform_build_and_publish:
name: Multi-Platform Build and Publish name: Multi-Platform Build and Publish
uses: openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml@v1.0.0 uses: openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml@main
with: with:
release_type: ${{ inputs.release_type }} release_type: ${{ inputs.release_type }}
target_branch: ${{ inputs.target_branch }} target_branch: ${{ inputs.target_branch }}
android_package_name: 'mifospay-android' # <-- Change this to your android package name android_package_name: 'cmp-android'
ios_package_name: 'mifospay-ios' # <-- Change this to your ios package name ios_package_name: 'cmp-ios'
desktop_package_name: 'mifospay-desktop' # <-- Change this to your desktop package name desktop_package_name: 'cmp-desktop'
web_package_name: 'mifospay-web' # <-- Change this to your web package name web_package_name: 'cmp-web'
tester_groups: 'mifos-mobile-apps' # <-- Change this to your Firebase tester group tester_groups: 'mifos-mobile-apps'
build_ios: ${{ inputs.build_ios }} app_identifier: 'org.mifospay'
publish_ios: ${{ inputs.publish_ios }} git_url: 'git@github.com:openMF/ios-provisioning-profile.git'
git_branch: 'mifospay'
match_type: 'adhoc'
provisioning_profile_name: 'match AdHoc org.mifospay'
firebase_app_id: '1:728434912738:ios:86a7badfaed88b841a1dbb'
metadata_path: './fastlane/metadata'
use_cocoapods: true # <-- Set to true if using CocoaPods integration for KMP
shared_module: ':cmp-shared' # <-- Gradle path to your shared KMP module (e.g., :shared)
distribute_ios_firebase: ${{ inputs.distribute_ios_firebase }}
distribute_ios_testflight: ${{ inputs.distribute_ios_testflight }}
distribute_ios_appstore: ${{ inputs.distribute_ios_appstore }}
secrets: secrets:
original_keystore_file: ${{ secrets.ORIGINAL_KEYSTORE_FILE }} original_keystore_file: ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
original_keystore_file_password: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }} original_keystore_file_password: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
@ -121,6 +136,11 @@ jobs:
notarization_apple_id: ${{ secrets.NOTARIZATION_APPLE_ID }} notarization_apple_id: ${{ secrets.NOTARIZATION_APPLE_ID }}
notarization_password: ${{ secrets.NOTARIZATION_PASSWORD }} notarization_password: ${{ secrets.NOTARIZATION_PASSWORD }}
notarization_team_id: ${{ secrets.NOTARIZATION_TEAM_ID }} notarization_team_id: ${{ secrets.NOTARIZATION_TEAM_ID }}
appstore_key_id: ${{ secrets.APPSTORE_KEY_ID }}
appstore_issuer_id: ${{ secrets.APPSTORE_ISSUER_ID }}
appstore_auth_key: ${{ secrets.APPSTORE_AUTH_KEY }}
match_password: ${{ secrets.MATCH_PASSWORD }}
match_ssh_private_key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
windows_signing_key: ${{ secrets.WINDOWS_SIGNING_KEY }} windows_signing_key: ${{ secrets.WINDOWS_SIGNING_KEY }}
windows_signing_password: ${{ secrets.WINDOWS_SIGNING_PASSWORD }} windows_signing_password: ${{ secrets.WINDOWS_SIGNING_PASSWORD }}

View File

@ -81,7 +81,7 @@ permissions:
jobs: jobs:
pr_checks: pr_checks:
name: PR Checks name: PR Checks
uses: openMF/mifos-x-actionhub/.github/workflows/pr-check.yaml@v1.0.3 uses: openMF/mifos-x-actionhub/.github/workflows/pr-check.yaml@main
secrets: inherit secrets: inherit
with: with:
android_package_name: 'cmp-android' # <-- Change Your Android Package Name android_package_name: 'cmp-android' # <-- Change Your Android Package Name

View File

@ -7,6 +7,7 @@ rescue Errno::ENOENT
end end
gem "fastlane" gem "fastlane"
gem "cocoapods"
plugins_path = File.join(File.dirname(__FILE__), "fastlane", "Pluginfile") plugins_path = File.join(File.dirname(__FILE__), "fastlane", "Pluginfile")
eval_gemfile(plugins_path) if File.exist?(plugins_path) eval_gemfile(plugins_path) if File.exist?(plugins_path)

View File

@ -5,8 +5,23 @@ GEM
base64 base64
nkf nkf
rexml rexml
activesupport (7.2.2.1)
base64
benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.7) addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0) public_suffix (>= 2.0.2, < 7.0)
algoliasearch (1.27.5)
httpclient (~> 2.8, >= 2.8.3)
json (>= 1.5.1)
artifactory (3.0.17) artifactory (3.0.17)
atomos (0.1.3) atomos (0.1.3)
aws-eventstream (1.4.0) aws-eventstream (1.4.0)
@ -30,18 +45,63 @@ GEM
aws-eventstream (~> 1, >= 1.0.2) aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4) babosa (1.0.4)
base64 (0.3.0) base64 (0.3.0)
benchmark (0.3.0)
bigdecimal (3.2.2) bigdecimal (3.2.2)
claide (1.1.0) claide (1.1.0)
cocoapods (1.16.2)
addressable (~> 2.8)
claide (>= 1.0.2, < 2.0)
cocoapods-core (= 1.16.2)
cocoapods-deintegrate (>= 1.0.3, < 2.0)
cocoapods-downloader (>= 2.1, < 3.0)
cocoapods-plugins (>= 1.0.0, < 2.0)
cocoapods-search (>= 1.0.0, < 2.0)
cocoapods-trunk (>= 1.6.0, < 2.0)
cocoapods-try (>= 1.1.0, < 2.0)
colored2 (~> 3.1)
escape (~> 0.0.4)
fourflusher (>= 2.3.0, < 3.0)
gh_inspector (~> 1.0)
molinillo (~> 0.8.0)
nap (~> 1.0)
ruby-macho (>= 2.3.0, < 3.0)
xcodeproj (>= 1.27.0, < 2.0)
cocoapods-core (1.16.2)
activesupport (>= 5.0, < 8)
addressable (~> 2.8)
algoliasearch (~> 1.0)
concurrent-ruby (~> 1.1)
fuzzy_match (~> 2.0.4)
nap (~> 1.0)
netrc (~> 0.11)
public_suffix (~> 4.0)
typhoeus (~> 1.0)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (2.1)
cocoapods-plugins (1.0.0)
nap
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.2.0)
colored (1.2) colored (1.2)
colored2 (3.1.2) colored2 (3.1.2)
commander (4.6.0) commander (4.6.0)
highline (~> 2.0.0) highline (~> 2.0.0)
concurrent-ruby (1.3.5)
connection_pool (2.5.0)
declarative (0.0.20) declarative (0.0.20)
digest-crc (0.7.0) digest-crc (0.7.0)
rake (>= 12.0.0, < 14.0.0) rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107) domain_name (0.6.20240107)
dotenv (2.8.1) dotenv (2.8.1)
drb (2.2.0)
ruby2_keywords
emoji_regex (3.2.3) emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.16.0)
ffi (>= 1.15.0)
excon (0.112.0) excon (0.112.0)
faraday (1.10.4) faraday (1.10.4)
faraday-em_http (~> 1.0) faraday-em_http (~> 1.0)
@ -120,6 +180,9 @@ GEM
fastlane-plugin-increment_build_number (0.0.4) fastlane-plugin-increment_build_number (0.0.4)
fastlane-sirp (1.0.0) fastlane-sirp (1.0.0)
sysrandom (~> 1.0) sysrandom (~> 1.0)
ffi (1.17.1-arm64-darwin)
fourflusher (2.3.1)
fuzzy_match (2.0.4)
gh_inspector (1.1.3) gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0) google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a) google-apis-core (>= 0.11.0, < 2.a)
@ -166,6 +229,8 @@ GEM
domain_name (~> 0.5) domain_name (~> 0.5)
httpclient (2.9.0) httpclient (2.9.0)
mutex_m mutex_m
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jmespath (1.6.2) jmespath (1.6.2)
json (2.13.2) json (2.13.2)
jwt (2.10.2) jwt (2.10.2)
@ -173,16 +238,20 @@ GEM
logger (1.7.0) logger (1.7.0)
mini_magick (4.13.2) mini_magick (4.13.2)
mini_mime (1.1.5) mini_mime (1.1.5)
minitest (5.20.0)
molinillo (0.8.0)
multi_json (1.17.0) multi_json (1.17.0)
multipart-post (2.4.1) multipart-post (2.4.1)
mutex_m (0.3.0) mutex_m (0.3.0)
nanaimo (0.4.0) nanaimo (0.4.0)
nap (1.1.0)
naturally (2.3.0) naturally (2.3.0)
netrc (0.11.0)
nkf (0.2.0) nkf (0.2.0)
optparse (0.6.0) optparse (0.6.0)
os (1.1.4) os (1.1.4)
plist (3.7.2) plist (3.7.2)
public_suffix (6.0.2) public_suffix (4.0.7)
rake (13.3.0) rake (13.3.0)
representable (3.2.0) representable (3.2.0)
declarative (< 0.1.0) declarative (< 0.1.0)
@ -191,8 +260,10 @@ GEM
retriable (3.1.2) retriable (3.1.2)
rexml (3.4.1) rexml (3.4.1)
rouge (3.28.0) rouge (3.28.0)
ruby-macho (2.5.1)
ruby2_keywords (0.0.5) ruby2_keywords (0.0.5)
rubyzip (2.4.1) rubyzip (2.4.1)
securerandom (0.3.1)
security (0.1.5) security (0.1.5)
signet (0.20.0) signet (0.20.0)
addressable (~> 2.8) addressable (~> 2.8)
@ -211,6 +282,10 @@ GEM
tty-screen (0.8.2) tty-screen (0.8.2)
tty-spinner (0.9.3) tty-spinner (0.9.3)
tty-cursor (~> 0.7) tty-cursor (~> 0.7)
typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
uber (0.1.0) uber (0.1.0)
unicode-display_width (2.6.0) unicode-display_width (2.6.0)
word_wrap (1.0.0) word_wrap (1.0.0)
@ -227,10 +302,11 @@ GEM
xcpretty (~> 0.2, >= 0.0.7) xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS PLATFORMS
arm64-darwin-24
ruby ruby
x64-mingw-ucrt
DEPENDENCIES DEPENDENCIES
cocoapods
fastlane fastlane
fastlane-plugin-firebase_app_distribution fastlane-plugin-firebase_app_distribution
fastlane-plugin-increment_build_number fastlane-plugin-increment_build_number

View File

@ -13,9 +13,9 @@ internal fun Project.configureKotlinMultiplatform() {
jvm("desktop") jvm("desktop")
androidTarget() androidTarget()
iosArm64()
iosSimulatorArm64() iosSimulatorArm64()
iosX64() iosX64()
iosArm64()
js(IR) { js(IR) {
this.nodejs() this.nodejs()
binaries.executable() binaries.executable()

View File

@ -1,4 +1,4 @@
package: name='org.mifospay' versionCode='1' versionName='2025.8.2-beta.0.2' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15' package: name='org.mifospay' versionCode='1' versionName='2025.8.2-beta.0.3' platformBuildVersionName='15' platformBuildVersionCode='35' compileSdkVersion='35' compileSdkVersionCodename='15'
minSdkVersion:'26' minSdkVersion:'26'
targetSdkVersion:'34' targetSdkVersion:'34'
uses-permission: name='android.permission.INTERNET' uses-permission: name='android.permission.INTERNET'

View File

@ -1,12 +1,21 @@
platform :ios, '16.0' deployment_target = '16.0'
use_frameworks!
target 'iosApp' do target 'iosApp' do
project 'iosApp.xcodeproj' use_frameworks!
platform :ios, deployment_target
# Pods for iosApp
pod 'cmp_shared', :path => '../cmp-shared' pod 'cmp_shared', :path => '../cmp-shared'
end
# Native Firebase iOS Pods required by firebase-kotlin-sdk post_install do |installer|
pod 'FirebaseCore' installer.generated_projects.each do |project|
pod 'FirebaseAnalytics' project.targets.each do |target|
pod 'FirebaseCrashlytics' target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target
end
end
project.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = deployment_target
end
end
end end

16
cmp-ios/Podfile.lock Normal file
View File

@ -0,0 +1,16 @@
PODS:
- cmp_shared (1.0)
DEPENDENCIES:
- cmp_shared (from `../cmp-shared`)
EXTERNAL SOURCES:
cmp_shared:
:path: "../cmp-shared"
SPEC CHECKSUMS:
cmp_shared: 572f72160ae05ea5b3f48ce339a45689782322e3
PODFILE CHECKSUM: fba668dc0eba2e4694ef273d90789cf739b8504c
COCOAPODS: 1.16.2

View File

@ -114,7 +114,6 @@
7555FF77242A565900829871 /* Sources */, 7555FF77242A565900829871 /* Sources */,
B92378962B6B1156000C7307 /* Frameworks */, B92378962B6B1156000C7307 /* Frameworks */,
7555FF79242A565900829871 /* Resources */, 7555FF79242A565900829871 /* Resources */,
F4AFB1CDEBBAABC6D5F3DC8F /* [CP] Embed Pods Frameworks */,
752A860311D78307D18B373B /* [CP] Copy Pods Resources */, 752A860311D78307D18B373B /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
@ -212,23 +211,6 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0; showEnvVarsInLog = 0;
}; };
F4AFB1CDEBBAABC6D5F3DC8F /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-iosApp/Pods-iosApp-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */ /* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */
@ -371,10 +353,10 @@
baseConfigurationReference = E5D357E5C5AAADD27F979C77 /* Pods-iosApp.debug.xcconfig */; baseConfigurationReference = E5D357E5C5AAADD27F979C77 /* Pods-iosApp.debug.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual;
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
DEVELOPMENT_TEAM = "${TEAM_ID}"; DEVELOPMENT_TEAM = L432S2FZP5;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -389,9 +371,9 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.0; MARKETING_VERSION = 1.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}${TEAM_ID}"; PRODUCT_BUNDLE_IDENTIFIER = org.mifospay;
PRODUCT_NAME = "${APP_NAME}"; PRODUCT_NAME = "${APP_NAME}";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "match AdHoc org.mifospay";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };
@ -402,10 +384,10 @@
baseConfigurationReference = 471D4B8AF5995E32718DCCCD /* Pods-iosApp.release.xcconfig */; baseConfigurationReference = 471D4B8AF5995E32718DCCCD /* Pods-iosApp.release.xcconfig */;
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Distribution";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Manual;
DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\""; DEVELOPMENT_ASSET_PATHS = "\"iosApp/Preview Content\"";
DEVELOPMENT_TEAM = "${TEAM_ID}"; DEVELOPMENT_TEAM = L432S2FZP5;
ENABLE_PREVIEWS = YES; ENABLE_PREVIEWS = YES;
FRAMEWORK_SEARCH_PATHS = ( FRAMEWORK_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
@ -420,9 +402,9 @@
"@executable_path/Frameworks", "@executable_path/Frameworks",
); );
MARKETING_VERSION = 1.0.0; MARKETING_VERSION = 1.0.0;
PRODUCT_BUNDLE_IDENTIFIER = "${BUNDLE_ID}${TEAM_ID}"; PRODUCT_BUNDLE_IDENTIFIER = org.mifospay;
PRODUCT_NAME = "${APP_NAME}"; PRODUCT_NAME = "${APP_NAME}";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "match AdHoc org.mifospay";
SWIFT_VERSION = 5.0; SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2"; TARGETED_DEVICE_FAMILY = "1,2";
}; };

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>cmp-ios.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:iosApp.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict />
</plist>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -19,7 +19,7 @@
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>1.0</string> <string>1.0</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1</string> <string>6</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>NSPhotoLibraryAddUsageDescription</key> <key>NSPhotoLibraryAddUsageDescription</key>

View File

@ -9,27 +9,15 @@
*/ */
plugins { plugins {
alias(libs.plugins.kmp.library.convention)
alias(libs.plugins.cmp.feature.convention) alias(libs.plugins.cmp.feature.convention)
alias(libs.plugins.android.library)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.kotlin.parcelize) alias(libs.plugins.kotlin.parcelize)
alias(libs.plugins.kotlinCocoapods) alias(libs.plugins.kotlinCocoapods)
} }
kotlin { kotlin {
listOf( iosArm64()
iosX64(), iosSimulatorArm64()
iosArm64(), iosX64()
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
optimized = true
}
}
sourceSets { sourceSets {
commonMain.dependencies { commonMain.dependencies {
@ -43,9 +31,6 @@ kotlin {
implementation(compose.components.uiToolingPreview) implementation(compose.components.uiToolingPreview)
implementation(compose.components.resources) implementation(compose.components.resources)
implementation(libs.window.size) implementation(libs.window.size)
implementation(libs.koin.core)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
implementation(projects.feature.auth) implementation(projects.feature.auth)
implementation(projects.libs.mifosPasscode) implementation(projects.libs.mifosPasscode)

View File

@ -9,11 +9,17 @@ module FastlaneConfig
BUILD_CONFIG = { BUILD_CONFIG = {
project_path: "cmp-ios/iosApp.xcodeproj", project_path: "cmp-ios/iosApp.xcodeproj",
workspace_path: "cmp-ios/iosApp.xcworkspace", workspace_path: "cmp-ios/iosApp.xcworkspace",
configuration: "Release",
podfile_path: "cmp-ios/Podfile",
plist_path: "cmp-ios/iosApp/Info.plist", plist_path: "cmp-ios/iosApp/Info.plist",
scheme: "iosApp", scheme: "cmp-ios",
output_name: "iosApp.ipa", output_name: "iosApp.ipa",
output_directory: "cmp-ios/build", output_directory: "cmp-ios/build",
match_git_private_key: "./secrets/match_ci_key", match_git_private_key: "./secrets/match_ci_key",
target: "iosApp",
team_id: "L432S2FZP5",
code_sign_identity: "Apple Distribution",
configuration: "Release",
match_type: "adhoc", match_type: "adhoc",
app_identifier: "org.mifospay", app_identifier: "org.mifospay",
provisioning_profile_name: "match AdHoc org.mifospay", provisioning_profile_name: "match AdHoc org.mifospay",
@ -22,7 +28,7 @@ module FastlaneConfig
key_id: "7V3ABCDEFG", key_id: "7V3ABCDEFG",
issuer_id: "7ab9e231-9603-4c3e-a147-be3b0f123456", issuer_id: "7ab9e231-9603-4c3e-a147-be3b0f123456",
key_filepath: "./secrets/Auth_key.p8", key_filepath: "./secrets/Auth_key.p8",
version_number: "1.0.0", version_number: "1.0",
metadata_path: "./fastlane/metadata", metadata_path: "./fastlane/metadata",
app_rating_config_path: "./fastlane/age_rating.json" app_rating_config_path: "./fastlane/age_rating.json"
} }

View File

@ -328,9 +328,7 @@ platform :ios do
unless ENV['CI'] unless ENV['CI']
UI.message("🖥️ Running locally, skipping CI-specific setup.") UI.message("🖥️ Running locally, skipping CI-specific setup.")
else else
setup_ci( setup_ci
provider: "circleci"
)
end end
end end
@ -350,7 +348,7 @@ platform :ios do
match( match(
type: options[:match_type] || ios_config[:match_type], type: options[:match_type] || ios_config[:match_type],
app_identifier: options[:app_identifier] || ios_config[:app_identifier], app_identifier: options[:app_identifier] || ios_config[:app_identifier],
readonly: false, readonly: true,
git_url: options[:git_url] || ios_config[:git_url], git_url: options[:git_url] || ios_config[:git_url],
git_branch: options[:git_branch] || ios_config[:git_branch], git_branch: options[:git_branch] || ios_config[:git_branch],
git_private_key: options[:git_private_key] || ios_config[:match_git_private_key], git_private_key: options[:git_private_key] || ios_config[:match_git_private_key],
@ -364,16 +362,29 @@ platform :ios do
app_identifier = options[:app_identifier] || ios_config[:app_identifier] app_identifier = options[:app_identifier] || ios_config[:app_identifier]
provisioning_profile_name = options[:provisioning_profile_name] || ios_config[:provisioning_profile_name] provisioning_profile_name = options[:provisioning_profile_name] || ios_config[:provisioning_profile_name]
cocoapods(
podfile: ios_config[:podfile_path],
clean_install: true,
repo_update: true
)
# Manual signing for your main app target
update_code_signing_settings(
use_automatic_signing: false,
path: ios_config[:project_path],
targets: [ios_config[:target]],
team_id: ios_config[:team_id],
code_sign_identity: ios_config[:code_sign_identity],
profile_name: provisioning_profile_name,
bundle_identifier: app_identifier
)
build_ios_app( build_ios_app(
scheme: ios_config[:scheme], scheme: ios_config[:scheme],
workspace: ios_config[:workspace_path], workspace: ios_config[:workspace_path],
output_name: ios_config[:output_name], output_name: ios_config[:output_name],
output_directory: ios_config[:output_directory], output_directory: ios_config[:output_directory],
export_options: { configuration: ios_config[:configuration]
provisioningProfiles: {
app_identifier => provisioning_profile_name
}
}
) )
end end
@ -384,6 +395,13 @@ platform :ios do
desc "Build Ios application" desc "Build Ios application"
lane :build_ios do |options| lane :build_ios do |options|
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
cocoapods(
podfile: ios_config[:podfile_path],
clean_install: true,
repo_update: true
)
build_ios_app( build_ios_app(
scheme: ios_config[:scheme], scheme: ios_config[:scheme],
workspace: ios_config[:workspace_path], workspace: ios_config[:workspace_path],
@ -472,7 +490,8 @@ platform :ios do
latest_build_number = latest_testflight_build_number( latest_build_number = latest_testflight_build_number(
app_identifier: options[:app_identifier] || ios_config[:app_identifier], app_identifier: options[:app_identifier] || ios_config[:app_identifier],
api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY],
version: ios_config[:version_number]
) )
increment_build_number( increment_build_number(
@ -508,9 +527,10 @@ platform :ios do
version_number: ios_config[:version_number] version_number: ios_config[:version_number]
) )
latest_build_number = latest_testflight_build_number( latest_build_number = app_store_build_number(
app_identifier: options[:app_identifier] || ios_config[:app_identifier], app_identifier: options[:app_identifier] || ios_config[:app_identifier],
api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] api_key: Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY],
version: ios_config[:version_number]
) )
increment_build_number( increment_build_number(

View File

@ -5,72 +5,87 @@
<testcase classname="fastlane.lanes" name="00: default_platform" time="0.000168"> <testcase classname="fastlane.lanes" name="00: default_platform" time="0.001053">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="01: Switch to ios increment_version lane" time="0.000156"> <testcase classname="fastlane.lanes" name="01: Switch to ios increment_version lane" time="0.00043">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="02: firebase_app_distribution_get_latest_release" time="1.487805"> <testcase classname="fastlane.lanes" name="02: firebase_app_distribution_get_latest_release" time="1.157779">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="03: Switch to ios build_signed_ios lane" time="0.000382"> <testcase classname="fastlane.lanes" name="03: increment_build_number" time="0.848547">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="04: Switch to ios setup_ci_if_needed lane" time="0.000269"> <testcase classname="fastlane.lanes" name="04: Switch to ios build_signed_ios lane" time="0.000849">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="05: Switch to ios load_api_key lane" time="0.000286"> <testcase classname="fastlane.lanes" name="05: Switch to ios setup_ci_if_needed lane" time="0.000275">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="06: app_store_connect_api_key" time="0.010104"> <testcase classname="fastlane.lanes" name="06: Switch to ios load_api_key lane" time="0.000238">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="07: Switch to ios fetch_certificates_with_match lane" time="0.000295"> <testcase classname="fastlane.lanes" name="07: app_store_connect_api_key" time="0.019969">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="08: match" time="6.779149"> <testcase classname="fastlane.lanes" name="08: Switch to ios fetch_certificates_with_match lane" time="0.000275">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="09: Switch to ios build_ios_project lane" time="0.000162"> <testcase classname="fastlane.lanes" name="09: match" time="4.097984">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="10: build_ios_app" time="1599.756975"> <testcase classname="fastlane.lanes" name="10: Switch to ios build_ios_project lane" time="0.000169">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="11: Switch to ios generateReleaseNote lane" time="0.000179"> <testcase classname="fastlane.lanes" name="11: cocoapods" time="7.410226">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="12: changelog_from_git_commits" time="0.018834"> <testcase classname="fastlane.lanes" name="12: update_code_signing_settings" time="0.736504">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="13: firebase_app_distribution" time="222.652332"> <testcase classname="fastlane.lanes" name="13: build_ios_app" time="68.8691">
</testcase>
<testcase classname="fastlane.lanes" name="14: Switch to ios generateReleaseNote lane" time="0.001172">
</testcase>
<testcase classname="fastlane.lanes" name="15: changelog_from_git_commits" time="0.021015">
</testcase>
<testcase classname="fastlane.lanes" name="16: firebase_app_distribution" time="49.270173">
</testcase> </testcase>