mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 08:15:24 +00:00
f73285db3e
Continue grouping the standalone modules under Components. Updates the preview asset paths and the media resource references in the app and unit test targets.
297 lines
10 KiB
YAML
297 lines
10 KiB
YAML
name: ElementX
|
|
|
|
schemes:
|
|
ElementX:
|
|
analyze:
|
|
config: Debug
|
|
archive:
|
|
config: Release
|
|
build:
|
|
targets:
|
|
ElementX:
|
|
- running
|
|
- testing
|
|
- profiling
|
|
- analyzing
|
|
- archiving
|
|
profile:
|
|
config: Release
|
|
run:
|
|
config: Debug
|
|
environmentVariables:
|
|
- variable: HTTPS_PROXY
|
|
value: localhost:9090
|
|
isEnabled: false
|
|
- variable: HTTP_PROXY
|
|
value: localhost:9090
|
|
isEnabled: false
|
|
- variable: UI_TESTS_SCREEN
|
|
value: ""
|
|
isEnabled: false
|
|
- variable: RESET_APP_SETTINGS
|
|
value: "true"
|
|
isEnabled: false
|
|
test:
|
|
config: Debug
|
|
gatherCoverageData: true
|
|
coverageTargets:
|
|
- ElementX
|
|
testPlans:
|
|
- path: ../../UnitTests/SupportingFiles/UnitTests.xctestplan
|
|
defaultPlan: true
|
|
|
|
targets:
|
|
ElementX:
|
|
type: application
|
|
platform: iOS
|
|
|
|
info:
|
|
path: Info.plist
|
|
properties:
|
|
UILaunchScreen:
|
|
UIColorName: colors/background-color
|
|
CFBundleDisplayName: $(APP_DISPLAY_NAME)
|
|
CFBundleShortVersionString: $(MARKETING_VERSION)
|
|
CFBundleVersion: $(CURRENT_PROJECT_VERSION)
|
|
CFBundleURLTypes: [
|
|
{
|
|
CFBundleTypeRole: Editor,
|
|
CFBundleURLName: "Application",
|
|
CFBundleURLSchemes: [
|
|
$(BASE_BUNDLE_IDENTIFIER), # The app's own scheme for custom routes
|
|
"matrix" # Matrix URI scheme for permalinks
|
|
]
|
|
}
|
|
]
|
|
UIApplicationSceneManifest: {
|
|
UIApplicationSupportsMultipleScenes: true
|
|
}
|
|
UISupportedInterfaceOrientations: [
|
|
UIInterfaceOrientationPortrait,
|
|
UIInterfaceOrientationPortraitUpsideDown,
|
|
UIInterfaceOrientationLandscapeLeft,
|
|
UIInterfaceOrientationLandscapeRight
|
|
]
|
|
appGroupIdentifier: $(APP_GROUP_IDENTIFIER)
|
|
baseBundleIdentifier: $(BASE_BUNDLE_IDENTIFIER)
|
|
keychainAccessGroupIdentifier: $(KEYCHAIN_ACCESS_GROUP_IDENTIFIER)
|
|
classicAppGroupIdentifier: $(CLASSIC_APP_GROUP_IDENTIFIER)
|
|
classicAppKeychainServiceIdentifier: $(CLASSIC_APP_KEYCHAIN_SERVICE_IDENTIFIER)
|
|
classicAppKeychainAccessGroupIdentifier: $(CLASSIC_APP_KEYCHAIN_ACCESS_GROUP_IDENTIFIER)
|
|
classicAppDeepLinkURL: $(CLASSIC_APP_DEEP_LINK_URL)
|
|
productionAppName: $(PRODUCTION_APP_NAME)
|
|
isNightlyBuild: $(IS_NIGHTLY_BUILD)
|
|
ITSAppUsesNonExemptEncryption: false
|
|
NSUserActivityTypes: [
|
|
INSendMessageIntent,
|
|
INStartCallIntent,
|
|
]
|
|
NSCameraUsageDescription: To take pictures or videos and send them as a message $(APP_DISPLAY_NAME) needs access to the camera.
|
|
NSMicrophoneUsageDescription: To record and send messages with audio, $(APP_DISPLAY_NAME) needs to access the microphone.
|
|
NSPhotoLibraryAddUsageDescription: This lets you save images and videos to your photo library.
|
|
NSLocationWhenInUseUsageDescription: Grant location access so that $(APP_DISPLAY_NAME) can share your location.
|
|
NSLocationAlwaysAndWhenInUseUsageDescription: To share your live location, $(APP_DISPLAY_NAME) needs location access when the app is in the background.
|
|
NSFaceIDUsageDescription: Face ID is used to access your app.
|
|
UIBackgroundModes: [
|
|
audio,
|
|
fetch,
|
|
processing,
|
|
voip,
|
|
location
|
|
]
|
|
BGTaskSchedulerPermittedIdentifiers: [
|
|
io.element.elementx.background.refresh
|
|
]
|
|
UTExportedTypeDeclarations:
|
|
- UTTypeConformsTo: [public.text]
|
|
UTTypeDescription: Mention Pills
|
|
UTTypeIdentifier: $(PILLS_UT_TYPE_IDENTIFIER)
|
|
CFBundleDocumentTypes:
|
|
- CFBundleTypeName: Mention Pills
|
|
CFBundleTypeRole: Viewer
|
|
LSHandlerRank: Owner
|
|
LSItemContentTypes: $(PILLS_UT_TYPE_IDENTIFIER)
|
|
LSSupportsOpeningDocumentsInPlace: false
|
|
|
|
entitlements:
|
|
path: ElementX.entitlements
|
|
properties:
|
|
aps-environment: development
|
|
com.apple.developer.associated-domains:
|
|
- applinks:element.io
|
|
- applinks:app.element.io
|
|
- applinks:staging.element.io
|
|
- applinks:develop.element.io
|
|
- applinks:mobile.element.io
|
|
- applinks:matrix.to
|
|
# - applinks:localhost?mode=developer # developer mode only works with https (but self-signed is fine).
|
|
- webcredentials:*.element.io
|
|
com.apple.developer.usernotifications.communication: true
|
|
com.apple.security.app-sandbox: true
|
|
com.apple.security.application-groups:
|
|
- $(APP_GROUP_IDENTIFIER)
|
|
- $(CLASSIC_APP_GROUP_IDENTIFIER)
|
|
com.apple.security.network.client: true
|
|
keychain-access-groups:
|
|
- $(KEYCHAIN_ACCESS_GROUP_IDENTIFIER)
|
|
- $(CLASSIC_APP_KEYCHAIN_ACCESS_GROUP_IDENTIFIER)
|
|
|
|
settings:
|
|
base:
|
|
PRODUCT_NAME: $(APP_NAME)
|
|
PRODUCT_BUNDLE_IDENTIFIER: $(BASE_BUNDLE_IDENTIFIER)
|
|
MARKETING_VERSION: $(MARKETING_VERSION)
|
|
CURRENT_PROJECT_VERSION: $(CURRENT_PROJECT_VERSION)
|
|
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
|
|
DEVELOPMENT_TEAM: $(DEVELOPMENT_TEAM)
|
|
SWIFT_OBJC_BRIDGING_HEADER: ElementX/SupportingFiles/ElementX-Bridging-Header.h
|
|
SWIFT_OBJC_INTERFACE_HEADER_NAME: GeneratedInterface-Swift.h
|
|
PILLS_UT_TYPE_IDENTIFIER: $(BASE_BUNDLE_IDENTIFIER).pills
|
|
DEVELOPMENT_ASSET_PATHS: Components/DevelopmentAssets/Media
|
|
SWIFT_VERSION: 6.2
|
|
SWIFT_APPROACHABLE_CONCURRENCY: YES
|
|
SWIFT_DEFAULT_ACTOR_ISOLATION: MainActor
|
|
OTHER_SWIFT_FLAGS:
|
|
- "-DIS_MAIN_APP"
|
|
|
|
preBuildScripts:
|
|
- name: 🛠 SwiftGen
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which swiftgen >/dev/null; then
|
|
swiftgen config run --config Tools/SwiftGen/swiftgen-config.yml
|
|
else
|
|
echo "warning: SwiftGen not installed, download from https://github.com/SwiftGen/SwiftGen"
|
|
fi
|
|
- name: 🧙 Sourcery - Generate mocks
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which sourcery >/dev/null; then
|
|
sourcery --config Tools/Sourcery/AutoMockableConfig.yml
|
|
else
|
|
echo "warning: Sourcery not installed, run swift run tools setup-project"
|
|
fi
|
|
|
|
- name: 🧙 Sourcery - Generate preview tests
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which sourcery >/dev/null; then
|
|
sourcery --config Tools/Sourcery/PreviewTestsConfig.yml
|
|
else
|
|
echo "warning: Sourcery not installed, run swift run tools setup-project"
|
|
fi
|
|
|
|
- name: 🧙 Sourcery - Generate Accessibility Tests
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which sourcery >/dev/null; then
|
|
sourcery --config Tools/Sourcery/TestablePreviewsDictionary.yml
|
|
sourcery --config Tools/Sourcery/AccessibilityTests.yml
|
|
else
|
|
echo "warning: Sourcery not installed, run swift run tools setup-project"
|
|
fi
|
|
|
|
postBuildScripts:
|
|
- name: ⚠️ SwiftLint
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which swiftlint >/dev/null; then
|
|
swiftlint
|
|
else
|
|
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
|
|
fi
|
|
- name: 🧹 SwiftFormat
|
|
runOnlyWhenInstalling: false
|
|
basedOnDependencyAnalysis: false
|
|
shell: /bin/sh
|
|
script: |
|
|
export PATH="$PATH:/opt/homebrew/bin"
|
|
if which swiftformat >/dev/null; then
|
|
swiftformat --lint --lenient "$PROJECT_DIR"
|
|
else
|
|
echo "warning: SwiftFormat not installed, download from https://github.com/nicklockwood/SwiftFormat"
|
|
fi
|
|
|
|
dependencies:
|
|
- target: NSE
|
|
- target: ShareExtension
|
|
- target: MatrixRustSDKMocks
|
|
- package: MatrixRustSDK
|
|
embed: true
|
|
- package: Compound
|
|
- package: BuildExtensions
|
|
product: Macros
|
|
- package: Algorithms
|
|
- package: AsyncAlgorithms
|
|
- package: AnalyticsEvents
|
|
- package: Collections
|
|
- package: DeviceKit
|
|
- package: EmbeddedElementCall
|
|
- package: KeychainAccess
|
|
- package: Kingfisher
|
|
- package: KZFileWatchers
|
|
- package: LoremSwiftum
|
|
- package: LRUCache
|
|
- package: Mantis
|
|
- target: MapLibreInterface
|
|
embed: true
|
|
# Embedded but not linked, dlopen'd on first map use
|
|
- target: MapLibreShim
|
|
link: false
|
|
embed: true
|
|
# The app just embeds the framework so it's in the bundle for the shim's load
|
|
# command to resolve against.
|
|
- framework: ../../MapLibre.framework
|
|
implicit: true
|
|
link: false
|
|
embed: true
|
|
- package: PostHog
|
|
- package: SwiftState
|
|
- package: GZIP
|
|
- package: Sentry
|
|
products:
|
|
- Sentry
|
|
- SentrySwiftUI
|
|
- package: Version
|
|
- package: Emojibase
|
|
- package: WysiwygComposer
|
|
- package: SwiftOGG
|
|
- package: SwiftSoup
|
|
- package: SwiftFlow
|
|
product: Flow
|
|
- package: DSWaveformImage
|
|
product: DSWaveformImageViews
|
|
|
|
sources:
|
|
- path: ../Sources
|
|
excludes:
|
|
- Other/Extensions/XCTestCase.swift
|
|
- Other/Extensions/XCUIElement.swift
|
|
- path: ../../Components/Secrets/Secrets.swift
|
|
- path: ../Resources
|
|
- path: ../SupportingFiles
|
|
- path: ../../Tools/Scripts/Templates/SimpleScreenExample/ElementX
|
|
- path: ../../Components/DevelopmentAssets/Media
|
|
|
|
# This is required for testing purposes... The problem with unit tests is that if you
|
|
# try to `@testable import NSE` you can only get the definition of files, but due to a
|
|
# limitation in how they work, they can only compile files that are part of the main test
|
|
# target, so linking will fail. The solution is to just have the main app to reference the
|
|
# extension code, and test it directly.
|
|
- path: ../../NSE/Sources
|