mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
5724e65d8e
Groundwork for loading MapLibre on demand. The map view is about to move into its own framework, and both sides need to agree on the types that cross the boundary, so ShowUserLocationMode and MapLibreError move out of the app into a small framework that the app links.
288 lines
10 KiB
YAML
288 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: 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
|
|
- package: MapLibre
|
|
- 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: ../../Secrets/Secrets.swift
|
|
- path: ../Resources
|
|
- path: ../SupportingFiles
|
|
- path: ../../Tools/Scripts/Templates/SimpleScreenExample/ElementX
|
|
- path: ../../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
|