feat: Ipad app production readiness, Colony orchestration, Social posting (#44)
#38 Ipad app production readiness, Colony orchestration, Social posting Co-authored-by: Sayan Datta <sayan@Sayans-MacBook-Air.local> Reviewed-on: #44
This commit was merged in pull request #44.
This commit is contained in:
8
iOS/velocity-ipad/fastlane/Appfile
Normal file
8
iOS/velocity-ipad/fastlane/Appfile
Normal file
@@ -0,0 +1,8 @@
|
||||
app_identifier("com.desineuron.velocity.ipad")
|
||||
apple_id(ENV.fetch("FASTLANE_APPLE_ID", ""))
|
||||
team_id(ENV.fetch("FASTLANE_TEAM_ID", "L29922NHD9"))
|
||||
itc_team_id(ENV["FASTLANE_ITC_TEAM_ID"]) if ENV["FASTLANE_ITC_TEAM_ID"]
|
||||
|
||||
for_platform :ios do
|
||||
app_identifier("com.desineuron.velocity.ipad")
|
||||
end
|
||||
84
iOS/velocity-ipad/fastlane/Deliverfile
Normal file
84
iOS/velocity-ipad/fastlane/Deliverfile
Normal file
@@ -0,0 +1,84 @@
|
||||
# App Store Connect metadata for Project Velocity iPad.
|
||||
# Fastlane's TestFlight upload action consumes the metadata module below, while
|
||||
# deliver can still use the App Store Connect and export-compliance settings.
|
||||
|
||||
module VelocityAppStoreConnectMetadata
|
||||
module_function
|
||||
|
||||
def testflight_groups
|
||||
ENV.fetch("FASTLANE_TESTFLIGHT_GROUPS", "Velocity Investor Demo")
|
||||
.split(",")
|
||||
.map(&:strip)
|
||||
.reject(&:empty?)
|
||||
end
|
||||
|
||||
def beta_app_review_info
|
||||
{
|
||||
contact_first_name: ENV.fetch("FASTLANE_BETA_CONTACT_FIRST_NAME", "Sayan"),
|
||||
contact_last_name: ENV.fetch("FASTLANE_BETA_CONTACT_LAST_NAME", "Desi Neuron"),
|
||||
contact_phone: ENV.fetch("FASTLANE_BETA_CONTACT_PHONE", "+919999999999"),
|
||||
contact_email: ENV.fetch("FASTLANE_BETA_CONTACT_EMAIL", "ops@desineuron.in"),
|
||||
demo_account_name: ENV.fetch("FASTLANE_BETA_DEMO_ACCOUNT", "demo@desineuron.in"),
|
||||
demo_account_password: ENV.fetch("FASTLANE_BETA_DEMO_PASSWORD", ""),
|
||||
notes: ENV.fetch(
|
||||
"FASTLANE_BETA_REVIEW_NOTES",
|
||||
"Please use the supplied demo account to validate Dashboard, Calendar, CRM Imports, Client 360, Oracle, Inventory, Sentinel, Communications, and Dream Weaver health states. The app is intended for managed iPad deployments for enterprise real estate sales teams."
|
||||
)
|
||||
}
|
||||
end
|
||||
|
||||
def localized_build_info
|
||||
{
|
||||
"default" => {
|
||||
whats_new: ENV.fetch(
|
||||
"FASTLANE_CHANGELOG",
|
||||
"Production candidate for investor demo validation with CRM, Oracle, Sentinel, Inventory, Communications, Calendar, and Dream Weaver workflows."
|
||||
)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def localized_app_info
|
||||
{
|
||||
"default" => {
|
||||
feedback_email: ENV.fetch("FASTLANE_BETA_FEEDBACK_EMAIL", "ops@desineuron.in"),
|
||||
marketing_url: ENV.fetch("FASTLANE_MARKETING_URL", "https://velocity.desineuron.in"),
|
||||
privacy_policy_url: ENV.fetch("FASTLANE_PRIVACY_URL", "https://velocity.desineuron.in/privacy"),
|
||||
description: ENV.fetch(
|
||||
"FASTLANE_BETA_DESCRIPTION",
|
||||
"Velocity iPad is the native CRM, Oracle, Sentinel, Inventory, and Dream Weaver command center for enterprise real estate operators."
|
||||
)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def submission_information
|
||||
{
|
||||
export_compliance_uses_encryption: false,
|
||||
export_compliance_contains_third_party_cryptography: false,
|
||||
export_compliance_contains_proprietary_cryptography: false,
|
||||
export_compliance_available_on_french_store: true,
|
||||
export_compliance_ccat_file: false,
|
||||
add_id_info_uses_idfa: false
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
def velocity_fastlane_config(method_name, *args)
|
||||
send(method_name, *args) if respond_to?(method_name)
|
||||
end
|
||||
|
||||
velocity_fastlane_config(:app_identifier, "com.desineuron.velocity.ipad")
|
||||
velocity_fastlane_config(:username, ENV.fetch("FASTLANE_APPLE_ID", ""))
|
||||
velocity_fastlane_config(:team_id, ENV.fetch("FASTLANE_TEAM_ID", "L29922NHD9"))
|
||||
velocity_fastlane_config(:itc_team_id, ENV["FASTLANE_ITC_TEAM_ID"]) if ENV["FASTLANE_ITC_TEAM_ID"]
|
||||
velocity_fastlane_config(:app_platform, "ios")
|
||||
|
||||
velocity_fastlane_config(:skip_screenshots, true)
|
||||
velocity_fastlane_config(:skip_binary_upload, true)
|
||||
velocity_fastlane_config(:skip_app_version_update, true)
|
||||
velocity_fastlane_config(:force, true)
|
||||
velocity_fastlane_config(:run_precheck_before_submit, false)
|
||||
velocity_fastlane_config(:submit_for_review, false)
|
||||
velocity_fastlane_config(:automatic_release, false)
|
||||
velocity_fastlane_config(:submission_information, VelocityAppStoreConnectMetadata.submission_information)
|
||||
113
iOS/velocity-ipad/fastlane/Fastfile
Normal file
113
iOS/velocity-ipad/fastlane/Fastfile
Normal file
@@ -0,0 +1,113 @@
|
||||
default_platform(:ios)
|
||||
|
||||
deliverfile_path = File.expand_path("Deliverfile", __dir__)
|
||||
load(deliverfile_path) if File.exist?(deliverfile_path)
|
||||
|
||||
platform :ios do
|
||||
private_lane :release_context do
|
||||
{
|
||||
project: "velocity.xcodeproj",
|
||||
scheme: ENV.fetch("VELOCITY_IOS_SCHEME", "velocity"),
|
||||
app_identifier: "com.desineuron.velocity.ipad",
|
||||
configuration: ENV.fetch("VELOCITY_IOS_CONFIGURATION", "Release"),
|
||||
output_directory: ENV.fetch("VELOCITY_IOS_OUTPUT_DIR", "build/fastlane"),
|
||||
derived_data_path: ENV.fetch("VELOCITY_IOS_DERIVED_DATA", "build/DerivedData"),
|
||||
device: ENV.fetch("VELOCITY_IOS_TEST_DEVICE", "iPad Pro (12.9-inch) (6th generation)")
|
||||
}
|
||||
end
|
||||
|
||||
private_lane :testflight_metadata do
|
||||
metadata = defined?(VelocityAppStoreConnectMetadata) ? VelocityAppStoreConnectMetadata : nil
|
||||
UI.user_error!("fastlane/Deliverfile must define VelocityAppStoreConnectMetadata.") unless metadata
|
||||
|
||||
{
|
||||
groups: metadata.testflight_groups,
|
||||
beta_app_review_info: metadata.beta_app_review_info,
|
||||
localized_build_info: metadata.localized_build_info,
|
||||
localized_app_info: metadata.localized_app_info
|
||||
}
|
||||
end
|
||||
|
||||
desc "Fetch or create Apple Distribution certificate through fastlane cert"
|
||||
lane :certificates do
|
||||
cert(
|
||||
development: false,
|
||||
force: ENV["FASTLANE_FORCE_CERT"] == "1",
|
||||
output_path: "fastlane/certs"
|
||||
)
|
||||
end
|
||||
|
||||
desc "Fetch or create App Store provisioning profile through fastlane sigh"
|
||||
lane :profiles do
|
||||
ctx = release_context
|
||||
sigh(
|
||||
app_identifier: ctx[:app_identifier],
|
||||
adhoc: false,
|
||||
skip_install: false,
|
||||
force: ENV["FASTLANE_FORCE_PROFILE"] == "1",
|
||||
filename: "Velocity_iPad_AppStore.mobileprovision",
|
||||
output_path: "fastlane/profiles"
|
||||
)
|
||||
end
|
||||
|
||||
desc "Run unit and UI tests for the iPad app"
|
||||
lane :tests do
|
||||
ctx = release_context
|
||||
scan(
|
||||
project: ctx[:project],
|
||||
scheme: ctx[:scheme],
|
||||
devices: [ctx[:device]],
|
||||
clean: true,
|
||||
derived_data_path: ctx[:derived_data_path],
|
||||
result_bundle: true,
|
||||
output_directory: "#{ctx[:output_directory]}/test-results",
|
||||
output_types: "html,junit",
|
||||
include_simulator_logs: true,
|
||||
fail_build: true
|
||||
)
|
||||
end
|
||||
|
||||
desc "Build the iPad app and upload it to TestFlight"
|
||||
lane :beta do
|
||||
ctx = release_context
|
||||
metadata = testflight_metadata
|
||||
|
||||
certificates
|
||||
profiles
|
||||
tests
|
||||
|
||||
build_app(
|
||||
project: ctx[:project],
|
||||
scheme: ctx[:scheme],
|
||||
configuration: ctx[:configuration],
|
||||
clean: true,
|
||||
export_method: "app-store",
|
||||
output_directory: ctx[:output_directory],
|
||||
output_name: "Velocity-iPad.ipa",
|
||||
derived_data_path: ctx[:derived_data_path],
|
||||
include_symbols: true,
|
||||
include_bitcode: false,
|
||||
xcargs: [
|
||||
"DEVELOPMENT_TEAM=#{ENV.fetch("FASTLANE_TEAM_ID", "L29922NHD9")}",
|
||||
"PRODUCT_BUNDLE_IDENTIFIER=#{ctx[:app_identifier]}"
|
||||
].join(" ")
|
||||
)
|
||||
|
||||
pilot(
|
||||
ipa: "#{ctx[:output_directory]}/Velocity-iPad.ipa",
|
||||
app_identifier: ctx[:app_identifier],
|
||||
skip_waiting_for_build_processing: ENV.fetch("FASTLANE_SKIP_WAITING", "false") == "true",
|
||||
distribute_external: ENV.fetch("FASTLANE_DISTRIBUTE_EXTERNAL", "1") == "1",
|
||||
notify_external_testers: ENV["FASTLANE_NOTIFY_EXTERNAL_TESTERS"] == "1",
|
||||
groups: metadata[:groups],
|
||||
beta_app_review_info: metadata[:beta_app_review_info],
|
||||
localized_app_info: metadata[:localized_app_info],
|
||||
localized_build_info: metadata[:localized_build_info],
|
||||
beta_app_feedback_email: metadata[:localized_app_info]["default"][:feedback_email],
|
||||
beta_app_description: metadata[:localized_app_info]["default"][:description],
|
||||
demo_account_required: true,
|
||||
uses_non_exempt_encryption: false,
|
||||
changelog: metadata[:localized_build_info]["default"][:whats_new]
|
||||
)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user