Skip to content

Commit 92db6e5

Browse files
Merge branch 'master' into nmc/1933-Collabora_customisation
2 parents ce85acc + 7b7f1d6 commit 92db6e5

448 files changed

Lines changed: 17188 additions & 13270 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/xcode.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ env:
1919
PROJECT: Nextcloud.xcodeproj
2020
DESTINATION: platform=iOS Simulator,name=iPhone 16,OS=18.5
2121
SCHEME: Nextcloud
22+
XCODE_VERSION: '26.0.1'
2223
SERVER_BRANCH: stable30
2324
PHP_VERSION: 8.3
2425

@@ -37,7 +38,7 @@ jobs:
3738
- name: Setup Xcode
3839
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
3940
with:
40-
xcode-version: '26.0.1'
41+
xcode-version: ${{ env.XCODE_VERSION }}
4142

4243
- name: Run Xcode Build
4344
run: |
@@ -60,13 +61,16 @@ jobs:
6061
runs-on: macos-15
6162
needs: [build]
6263

63-
# Temporarily, project has no effective tests except UI tests which are unfeasible on virtualized GitHub runners (see #3291)
64-
# Previously: github.event.pull_request.draft == false
65-
if: false
66-
64+
if: github.event.pull_request.draft == false
65+
6766
steps:
6867
- uses: actions/checkout@v4
6968

69+
- name: Setup Xcode
70+
uses: maxim-lobanov/setup-xcode@60606e260d2fc5762a71e64e74b2174e8ea3c8bd # v1.6.0
71+
with:
72+
xcode-version: ${{ env.XCODE_VERSION }}
73+
7074
- name: Prepare PHP ${{ env.PHP_VERSION }}
7175
uses: shivammathur/setup-php@v2
7276
with:

AGENTS.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<!--
2+
- SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors
3+
- SPDX-License-Identifier: GPL-2.0-or-later
4+
-->
5+
6+
# AGENTS.md
7+
8+
You are an experienced engineer specialized in Swift and familiar with the platform-specific details of iOS.
9+
10+
## Your Role
11+
12+
- You implement features and fix bugs.
13+
- Your documentation and explanations are written for less experienced contributors to ease understanding and learning.
14+
- You work on an open source project and lowering the barrier for contributors is part of your work.
15+
16+
## Project Overview
17+
18+
The Nextcloud iOS Client is a tool to access and synchronize files from Nextcloud Server on your iPhone or iPad.
19+
Swift, UIKit and SwiftUI are the key technologies used for building the app on iOS.
20+
Beyond that, there is shared code in the form of the NextcloudKit library for use in macOS and iOS.
21+
Other platforms like Android are irrelevant for this project.
22+
23+
## Project Structure: AI Agent Handling Guidelines
24+
25+
| Directory | Description | Agent Action |
26+
|-----------------|-----------------------------------------------------|----------------------|
27+
| `.github` | GitHub CI workflows. | Try to add unit tests for new features, where applicable and makes sense. Do not overcomplicate unit tests. |
28+
| `iOSClient` | Main iOS client source code. ||
29+
| `iOSClient/SupportingFiles` | Translation files from Transifex. | Only add new strings in `en.lproj`. The rest you should ignore. |
30+
| `File Provider Extension` | Contains business logic for the iOS File Provider extension. ||
31+
| `File Provider Extension UI` | Contains UI logic for the iOS File Provider extension. ||
32+
| `Share` | Contains code for the iOS Share extension. ||
33+
| `Widget` | Contains code for iOS Widgets. ||
34+
| `WidgetDashboardIntentHandler` | Contains the intent handler for the dashboard widget. ||
35+
| `Notification Service Extension` | Contains the push notification service extension. ||
36+
| `Tests` | Contains unit and UI tests. ||
37+
38+
## General Guidance
39+
40+
Every new file needs to get a SPDX header in the first rows according to this template.
41+
The year in the first line must be replaced with the year when the file is created (for example, 2026 for files first added in 2026).
42+
The commenting signs need to be used depending on the file type.
43+
44+
```plaintext
45+
SPDX-FileCopyrightText: <YEAR> Nextcloud GmbH and Nextcloud contributors
46+
SPDX-License-Identifier: GPL-2.0-or-later
47+
```
48+
49+
Avoid creating source files that implement multiple types; instead, place each type in its own dedicated source file.
50+
51+
## Commit and Pull Request Guidelines
52+
53+
- **DCO sign-off (required)**: All commits must comply with the Developer Certificate of Origin (DCO) as described in `README.md` and include a `Signed-off-by: …` line in the commit message.
54+
- **Commits**: In addition to the DCO sign-off, follow the Conventional Commits format for the subject line where reasonable. Use `feat: ...`, `fix: ...`, or `refactor: ...` as appropriate in the commit message prefix.
55+
- Include a short summary of what changed. *Example:* `fix: prevent crash on empty todo title`.
56+
- **Pull Request**: When the agent creates a PR, it should include a description summarizing the changes and why they were made. If a GitHub issue exists, reference it (e.g., “Closes #123”). If there is any discrepancy between this section and the contribution guidance in `README.md`, the rules in `README.md` take precedence.
57+
58+
## iOS Specifics
59+
60+
The following details are important when working on the iOS client.
61+
62+
### Requirements
63+
64+
- Latest stable Xcode available is required to be installed in the development environment.
65+
66+
### Code Style
67+
68+
- When writing code in Swift, respect strict concurrency rules and Swift 6 compatibility.
69+
70+
### Tests
71+
72+
- When implementing new test suites, prefer Swift Testing over XCTest for implementation.
73+
- When implementing test cases using Swift Testing, do not prefix test method names with "test".
74+
- If the implementation of mock types is inevitable, implement them in dedicated source code files and in a generic way, so they can be reused across all tests in a test target.
75+
- If the implementation of an existing mock type does not fulfill the requirements introduced by new tests, prefer updating the existing type before implementing a mostly redundant alternative type.
76+
- Verify that all tests are passing and correct them if necessary.
Lines changed: 8 additions & 0 deletions
Loading

AppIcon.icon/icon.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"fill" : {
3+
"solid" : "display-p3:0.10980,0.68627,1.00000,1.00000"
4+
},
5+
"groups" : [
6+
{
7+
"layers" : [
8+
{
9+
"glass-specializations" : [
10+
{
11+
"value" : true
12+
},
13+
{
14+
"idiom" : "square",
15+
"value" : true
16+
}
17+
],
18+
"hidden" : false,
19+
"image-name" : "Nextcloud-logo-markonly-white.svg",
20+
"name" : "Nextcloud-logo-markonly-white",
21+
"opacity" : 1,
22+
"position" : {
23+
"scale" : 7,
24+
"translation-in-points" : [
25+
0,
26+
0
27+
]
28+
}
29+
}
30+
],
31+
"shadow" : {
32+
"kind" : "neutral",
33+
"opacity" : 0.5
34+
},
35+
"translucency" : {
36+
"enabled" : true,
37+
"value" : 0.5
38+
}
39+
}
40+
],
41+
"supported-platforms" : {
42+
"circles" : [
43+
"watchOS"
44+
],
45+
"squares" : "shared"
46+
}
47+
}
Lines changed: 7 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -1,158 +1,14 @@
11
{
22
"images" : [
33
{
4-
"size" : "20x20",
5-
"idiom" : "iphone",
6-
"filename" : "nextcloud-icon40@1x.png",
7-
"scale" : "2x"
8-
},
9-
{
10-
"size" : "20x20",
11-
"idiom" : "iphone",
12-
"filename" : "nextcloud-icon60@3x.png",
13-
"scale" : "3x"
14-
},
15-
{
16-
"size" : "29x29",
17-
"idiom" : "iphone",
18-
"filename" : "nextcloud-icon29@1x.png",
19-
"scale" : "1x"
20-
},
21-
{
22-
"size" : "29x29",
23-
"idiom" : "iphone",
24-
"filename" : "nextcloud-icon58@2x.png",
25-
"scale" : "2x"
26-
},
27-
{
28-
"size" : "29x29",
29-
"idiom" : "iphone",
30-
"filename" : "nextcloud-icon87@3x.png",
31-
"scale" : "3x"
32-
},
33-
{
34-
"size" : "40x40",
35-
"idiom" : "iphone",
36-
"filename" : "nextcloud-icon80@2x.png",
37-
"scale" : "2x"
38-
},
39-
{
40-
"size" : "40x40",
41-
"idiom" : "iphone",
42-
"filename" : "nextcloud-icon120@3x.png",
43-
"scale" : "3x"
44-
},
45-
{
46-
"size" : "57x57",
47-
"idiom" : "iphone",
48-
"filename" : "nextcloud-icon57@1x.png",
49-
"scale" : "1x"
50-
},
51-
{
52-
"size" : "57x57",
53-
"idiom" : "iphone",
54-
"filename" : "nextcloud-icon114@2x.png",
55-
"scale" : "2x"
56-
},
57-
{
58-
"size" : "60x60",
59-
"idiom" : "iphone",
60-
"filename" : "nextcloud-icon120@2x.png",
61-
"scale" : "2x"
62-
},
63-
{
64-
"size" : "60x60",
65-
"idiom" : "iphone",
66-
"filename" : "nextcloud-icon180@3x.png",
67-
"scale" : "3x"
68-
},
69-
{
70-
"size" : "20x20",
71-
"idiom" : "ipad",
72-
"filename" : "nextcloud-icon20@1x.png",
73-
"scale" : "1x"
74-
},
75-
{
76-
"size" : "20x20",
77-
"idiom" : "ipad",
78-
"filename" : "nextcloud-icon40@2x.png",
79-
"scale" : "2x"
80-
},
81-
{
82-
"size" : "29x29",
83-
"idiom" : "ipad",
84-
"filename" : "nextcloud-icon29@1x-1.png",
85-
"scale" : "1x"
86-
},
87-
{
88-
"size" : "29x29",
89-
"idiom" : "ipad",
90-
"filename" : "nextcloud-icon58@2x-1.png",
91-
"scale" : "2x"
92-
},
93-
{
94-
"size" : "40x40",
95-
"idiom" : "ipad",
96-
"filename" : "nextcloud-icon40@1x-1.png",
97-
"scale" : "1x"
98-
},
99-
{
100-
"size" : "40x40",
101-
"idiom" : "ipad",
102-
"filename" : "nextcloud-icon80@2x-1.png",
103-
"scale" : "2x"
104-
},
105-
{
106-
"size" : "50x50",
107-
"idiom" : "ipad",
108-
"filename" : "nextcloud-icon50@1x.png",
109-
"scale" : "1x"
110-
},
111-
{
112-
"size" : "50x50",
113-
"idiom" : "ipad",
114-
"filename" : "nextcloud-icon100@2x.png",
115-
"scale" : "2x"
116-
},
117-
{
118-
"size" : "72x72",
119-
"idiom" : "ipad",
120-
"filename" : "nextcloud-icon72@1x.png",
121-
"scale" : "1x"
122-
},
123-
{
124-
"size" : "72x72",
125-
"idiom" : "ipad",
126-
"filename" : "nextcloud-icon144@2x.png",
127-
"scale" : "2x"
128-
},
129-
{
130-
"size" : "76x76",
131-
"idiom" : "ipad",
132-
"filename" : "nextcloud-icon76@1x.png",
133-
"scale" : "1x"
134-
},
135-
{
136-
"size" : "76x76",
137-
"idiom" : "ipad",
138-
"filename" : "nextcloud-icon152@2x.png",
139-
"scale" : "2x"
140-
},
141-
{
142-
"size" : "83.5x83.5",
143-
"idiom" : "ipad",
144-
"filename" : "nextcloud-icon167@2x.png",
145-
"scale" : "2x"
146-
},
147-
{
148-
"size" : "1024x1024",
149-
"idiom" : "ios-marketing",
150-
"filename" : "nextcloud-icon1024@1x.png",
151-
"scale" : "1x"
4+
"filename" : "Icon-App-1024x1024@1x.png",
5+
"idiom" : "universal",
6+
"platform" : "ios",
7+
"size" : "1024x1024"
1528
}
1539
],
15410
"info" : {
155-
"version" : 1,
156-
"author" : "xcode"
11+
"author" : "xcode",
12+
"version" : 1
15713
}
158-
}
14+
}

Brand/Custom.xcassets/AppIcon.appiconset/nextcloud-icon1024@1x.png renamed to Brand/Custom.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png

File renamed without changes.
-5.57 KB
Binary file not shown.
-6.37 KB
Binary file not shown.
-6.49 KB
Binary file not shown.
-6.49 KB
Binary file not shown.

0 commit comments

Comments
 (0)