1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
name: Grain
options:
bundleIdPrefix: social.grain
deploymentTarget:
iOS: "26.0"
xcodeVersion: "26.0"
generateEmptyDirectories: true
settings:
base:
SWIFT_VERSION: "6.0"
DEVELOPMENT_TEAM: ${APPLE_TEAM_ID}
PRODUCT_NAME: ${BUNDLE_NAME}
# The OAuth callback scheme Info.plist registers. `just sim-next` sets
# it to social.grain.next, beside NEXT_API.
GRAIN_OAUTH_SCHEME: social.grain
configs:
Debug:
SWIFT_ACTIVE_COMPILATION_CONDITIONS: "DEBUG PRODUCTION_API"
packages:
Nuke:
url: https://github.com/kean/Nuke
from: "12.0.0"
KeychainAccess:
url: https://github.com/kishikawakatsumi/KeychainAccess
from: "4.2.2"
SwiftyH3:
url: https://github.com/pawelmajcher/SwiftyH3
from: "0.5.0"
MapLibre:
url: https://github.com/maplibre/maplibre-gl-native-distribution
from: "6.29.0"
targets:
Grain:
type: application
platform: iOS
sources:
- path: Grain
entitlements:
path: Grain/Grain.entitlements
properties:
aps-environment: production
com.apple.developer.associated-domains:
- applinks:grain.social
- webcredentials:grain.social
settings:
base:
INFOPLIST_FILE: Grain/Info.plist
PRODUCT_BUNDLE_IDENTIFIER: ${BUNDLE_ID}
PRODUCT_MODULE_NAME: Grain
TARGETED_DEVICE_FAMILY: "1"
MARKETING_VERSION: "11"
CURRENT_PROJECT_VERSION: "59"
CODE_SIGN_STYLE: Automatic
DEVELOPMENT_ASSET_PATHS: "\"$(SRCROOT)/Grain/Preview Content\""
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor
configs:
Debug:
CODE_SIGN_ENTITLEMENTS: Grain/Grain-Debug.entitlements
GRAIN_OS_LOG_LEVEL: Debug
Release:
GRAIN_OS_LOG_LEVEL: Default
dependencies:
- package: Nuke
product: Nuke
- package: Nuke
product: NukeUI
- package: KeychainAccess
- package: SwiftyH3
- package: MapLibre
info:
path: Grain/Info.plist
properties:
CFBundleVersion: "$(CURRENT_PROJECT_VERSION)"
CFBundleShortVersionString: "$(MARKETING_VERSION)"
CFBundleURLTypes:
- CFBundleURLName: social.grain.deeplink
CFBundleURLSchemes:
- grain
- CFBundleURLName: social.grain.oauth
CFBundleURLSchemes:
- $(GRAIN_OAUTH_SCHEME)
CFBundleIconName: AppIcon
ITSAppUsesNonExemptEncryption: false
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
NSCameraUsageDescription: Grain needs camera access to take photos for your stories and galleries.
NSPhotoLibraryUsageDescription: Grain needs photo library access to select photos for your galleries and stories.
UIAppFonts:
- Syne-Variable.ttf
UILaunchScreen: {}
OSLogPreferences:
social.grain.grain:
DEFAULT-OPTIONS:
Level:
Enable: "$(GRAIN_OS_LOG_LEVEL)"
Persist: "$(GRAIN_OS_LOG_LEVEL)"
UIApplicationShortcutItems:
- UIApplicationShortcutItemType: social.grain.shortcut.createStory
UIApplicationShortcutItemTitle: Create Story
UIApplicationShortcutItemIconSymbolName: plus.circle
- UIApplicationShortcutItemType: social.grain.shortcut.createGallery
UIApplicationShortcutItemTitle: Create Post
UIApplicationShortcutItemIconSymbolName: plus.square.on.square
GrainTests:
type: bundle.unit-test
platform: iOS
sources:
- path: GrainTests
settings:
base:
GENERATE_INFOPLIST_FILE: YES
PRODUCT_NAME: GrainTests
PRODUCT_MODULE_NAME: GrainTests
TEST_HOST: $(BUILT_PRODUCTS_DIR)/${BUNDLE_NAME}.app/${BUNDLE_NAME}
BUNDLE_LOADER: $(TEST_HOST)
dependencies:
- target: Grain
schemes:
Grain:
build:
targets:
Grain:
- running
- testing
- profiling
- analyzing
- archiving
run:
config: Debug
test:
config: Debug
gatherCoverageData: true
coverageTargets:
- Grain
targets:
- GrainTests
profile:
config: Debug
analyze:
config: Debug
archive:
config: Release