mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-10-31 16:24:11 +00:00
fb49f5b83b
Add the element-call-ios dependency and a developer option for native calls The package carries the call UI and the matrix-rust-rtc media stack, pinned by exact version the way the SDK is, with the local path kept commented out for working against a checkout. Its media xcframework has no Intel simulator slice and a package cannot say so for the projects that consume it, hence the excluded architecture at the project level. The developer option is off by default and nothing reads it yet. It is placed next to the Element Call URL override, which only applies to the web view that native calls replace.
299 lines
10 KiB
YAML
299 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: ElementCall
|
|
product: ElementCall
|
|
- 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
|