Compare commits
No commits in common. "main" and "1.4.0" have entirely different histories.
17
.arkana.yml
17
.arkana.yml
|
@ -1,17 +0,0 @@
|
|||
import_name: 'ArkanaKeys'
|
||||
namespace: 'Keys'
|
||||
result_path: 'Dependencies'
|
||||
flavors:
|
||||
- AppStore
|
||||
swift_declaration_strategy: let
|
||||
should_generate_unit_tests: true
|
||||
package_manager: spm
|
||||
environments:
|
||||
- Debug
|
||||
- Release
|
||||
global_secrets:
|
||||
# nothing
|
||||
environment_secrets:
|
||||
# Will lookup for <Key>Debug and <Key>Release env vars (assuming no flavor was declared)
|
||||
# Mastodon Push Notification Endpoint
|
||||
- NotificationEndpoint
|
|
@ -1,7 +0,0 @@
|
|||
# Required
|
||||
|
||||
# https://<your-domain>/relay-to/development
|
||||
NotificationEndpointDebug=""
|
||||
|
||||
# https://<your-domain>/relay-to/production
|
||||
NotificationEndpointRelease=""
|
|
@ -1,75 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -xeu
|
||||
set -o pipefail
|
||||
|
||||
function finish() {
|
||||
ditto -c -k --sequesterRsrc --keepParent "${RESULT_BUNDLE_PATH}" "${RESULT_BUNDLE_PATH}.zip"
|
||||
rm -rf "${RESULT_BUNDLE_PATH}"
|
||||
}
|
||||
|
||||
trap finish EXIT
|
||||
|
||||
SDK="${SDK:-iphoneos}"
|
||||
WORKSPACE="${WORKSPACE:-Mastodon.xcworkspace}"
|
||||
SCHEME="${SCHEME:-Mastodon}"
|
||||
CONFIGURATION=${CONFIGURATION:-Release}
|
||||
|
||||
BUILD_DIR=${BUILD_DIR:-.build}
|
||||
ARTIFACT_PATH=${RESULT_PATH:-${BUILD_DIR}/Artifacts}
|
||||
RESULT_BUNDLE_PATH="${ARTIFACT_PATH}/${SCHEME}.xcresult"
|
||||
ARCHIVE_PATH=${ARCHIVE_PATH:-${BUILD_DIR}/Archives/${SCHEME}.xcarchive}
|
||||
DERIVED_DATA_PATH=${DERIVED_DATA_PATH:-${BUILD_DIR}/DerivedData}
|
||||
EXPORT_OPTIONS_FILE=".github/support/ExportOptions.plist"
|
||||
|
||||
WORK_DIR=$(pwd)
|
||||
API_PRIVATE_KEYS_PATH="${WORK_DIR}/${BUILD_DIR}/private_keys"
|
||||
API_KEY_FILE="${API_PRIVATE_KEYS_PATH}/api_key.p8"
|
||||
|
||||
rm -rf "${RESULT_BUNDLE_PATH}"
|
||||
|
||||
rm -rf "${API_PRIVATE_KEYS_PATH}"
|
||||
mkdir -p "${API_PRIVATE_KEYS_PATH}"
|
||||
echo -n "${ENV_API_PRIVATE_KEY_BASE64}" | base64 --decode > "${API_KEY_FILE}"
|
||||
|
||||
BUILD_NUMBER=$(app-store-connect get-latest-testflight-build-number $ENV_APP_ID --issuer-id $ENV_ISSUER_ID --key-id $ENV_API_KEY_ID --private-key @file:$API_KEY_FILE)
|
||||
BUILD_NUMBER=$((BUILD_NUMBER+1))
|
||||
CURRENT_PROJECT_VERSION=${BUILD_NUMBER:-0}
|
||||
|
||||
echo "GITHUB_TAG_NAME=build-$CURRENT_PROJECT_VERSION" >> $GITHUB_ENV
|
||||
|
||||
agvtool new-version -all $CURRENT_PROJECT_VERSION
|
||||
|
||||
xcrun xcodebuild clean \
|
||||
-workspace "${WORKSPACE}" \
|
||||
-scheme "${SCHEME}" \
|
||||
-configuration "${CONFIGURATION}"
|
||||
|
||||
xcrun xcodebuild archive \
|
||||
-workspace "${WORKSPACE}" \
|
||||
-scheme "${SCHEME}" \
|
||||
-configuration "${CONFIGURATION}" \
|
||||
-destination generic/platform=iOS \
|
||||
-sdk "${SDK}" \
|
||||
-parallelizeTargets \
|
||||
-showBuildTimingSummary \
|
||||
-derivedDataPath "${DERIVED_DATA_PATH}" \
|
||||
-archivePath "${ARCHIVE_PATH}" \
|
||||
-resultBundlePath "${RESULT_BUNDLE_PATH}" \
|
||||
-allowProvisioningUpdates \
|
||||
-authenticationKeyPath "${API_KEY_FILE}" \
|
||||
-authenticationKeyID "${ENV_API_KEY_ID}" \
|
||||
-authenticationKeyIssuerID "${ENV_ISSUER_ID}"
|
||||
|
||||
xcrun xcodebuild \
|
||||
-exportArchive \
|
||||
-archivePath "${ARCHIVE_PATH}" \
|
||||
-exportOptionsPlist "${EXPORT_OPTIONS_FILE}" \
|
||||
-exportPath "${ARTIFACT_PATH}/${SCHEME}.ipa" \
|
||||
-allowProvisioningUpdates \
|
||||
-authenticationKeyPath "${API_KEY_FILE}" \
|
||||
-authenticationKeyID "${ENV_API_KEY_ID}" \
|
||||
-authenticationKeyIssuerID "${ENV_ISSUER_ID}"
|
||||
|
||||
# Zip up the Xcode Archive into Artifacts folder.
|
||||
ditto -c -k --sequesterRsrc --keepParent "${ARCHIVE_PATH}" "${ARTIFACT_PATH}/${SCHEME}.xcarchive.zip"
|
|
@ -7,6 +7,6 @@ set -eo pipefail
|
|||
|
||||
xcodebuild -workspace Mastodon.xcworkspace \
|
||||
-scheme Mastodon \
|
||||
-destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \
|
||||
-destination "platform=iOS Simulator,name=iPhone SE (2nd generation)" \
|
||||
clean \
|
||||
build | xcpretty
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
# workaround https://github.com/CocoaPods/CocoaPods/issues/11355
|
||||
# sed -i '' $'1s/^/source "https:\\/\\/github.com\\/CocoaPods\\/Specs.git"\\\n\\\n/' Podfile
|
||||
sudo gem install cocoapods-keys
|
||||
|
||||
# Install Ruby Bundler
|
||||
gem install bundler:2.3.11
|
||||
# stub keys. DO NOT use in production
|
||||
pod keys set notification_endpoint "<endpoint>"
|
||||
pod keys set notification_endpoint_debug "<endpoint>"
|
||||
|
||||
# Install Ruby Gems
|
||||
bundle install
|
||||
|
||||
# Setup notification endpoint
|
||||
bundle exec arkana
|
||||
|
||||
bundle exec pod install
|
||||
pod install
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>method</key>
|
||||
<string>app-store</string>
|
||||
<key>manageAppVersionAndBuildNumber</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,74 +0,0 @@
|
|||
name: Build for Develop TestFlight
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
- release*
|
||||
- ci-test
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: macOS-12
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Setup
|
||||
env:
|
||||
NotificationEndpointDebug: ${{ secrets.NotificationEndpointDebug }}
|
||||
NotificationEndpointRelease: ${{ secrets.NotificationEndpointRelease }}
|
||||
run: exec ./.github/scripts/setup.sh
|
||||
|
||||
- name: Install codemagic-cli-tools
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.11'
|
||||
- run: |
|
||||
pip3 install codemagic-cli-tools
|
||||
- run: |
|
||||
codemagic-cli-tools --version || true
|
||||
|
||||
- name: Import Code-Signing Certificates
|
||||
uses: Apple-Actions/import-codesign-certs@v1 # https://github.com/Apple-Actions/import-codesign-certs
|
||||
with:
|
||||
keychain: build-p12
|
||||
p12-file-base64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
|
||||
p12-password: ${{ secrets.P12_PASSWORD }}
|
||||
|
||||
- name: Download Provisioning Profiles
|
||||
uses: Apple-Actions/download-provisioning-profiles@v1 # https://github.com/Apple-Actions/download-provisioning-profiles
|
||||
with:
|
||||
bundle-id: org.joinmastodon.app
|
||||
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
|
||||
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
ENV_APP_ID: ${{ secrets.APP_ID }}
|
||||
ENV_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}
|
||||
ENV_API_KEY_ID: ${{ secrets.APPSTORE_KEY_ID }}
|
||||
ENV_API_PRIVATE_KEY: ${{ secrets.APPSTORE_PRIVATE_KEY }}
|
||||
ENV_API_PRIVATE_KEY_BASE64: ${{ secrets.APP_STORE_CONNECT_KEY_BASE64 }}
|
||||
run: exec ./.github/scripts/build-release.sh
|
||||
|
||||
- name: Upload TestFlight Build
|
||||
uses: Apple-Actions/upload-testflight-build@master
|
||||
with:
|
||||
app-path: .build/Artifacts/Mastodon.ipa/Mastodon.ipa
|
||||
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
|
||||
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
|
||||
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
|
||||
|
||||
- name: Tag commit
|
||||
uses: tvdias/github-tagger@v0.0.1
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
tag: "${{ env.GITHUB_TAG_NAME }}"
|
||||
|
||||
- name: Clean up keychain and provisioning profile
|
||||
if: ${{ always() }}
|
||||
run: |
|
||||
security delete-keychain build-p12.keychain-db
|
|
@ -6,9 +6,6 @@ on:
|
|||
- master
|
||||
- develop
|
||||
- feature/*
|
||||
- feature-*
|
||||
- issue/*
|
||||
- issue-*
|
||||
pull_request:
|
||||
branches:
|
||||
- develop
|
||||
|
@ -18,14 +15,13 @@ on:
|
|||
jobs:
|
||||
build:
|
||||
name: CI build
|
||||
runs-on: macos-12
|
||||
runs-on: macos-11
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: force Xcode 13.2.1
|
||||
run: sudo xcode-select -switch /Applications/Xcode_13.2.1.app
|
||||
- name: setup
|
||||
env:
|
||||
NotificationEndpointDebug: ${{ secrets.NotificationEndpointDebug }}
|
||||
NotificationEndpointRelease: ${{ secrets.NotificationEndpointRelease }}
|
||||
run: exec ./.github/scripts/setup.sh
|
||||
- name: build
|
||||
run: exec ./.github/scripts/build.sh
|
||||
|
|
|
@ -120,9 +120,6 @@ xcuserdata
|
|||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/swift,swiftpm,xcode,cocoapods
|
||||
|
||||
# Localization/StringsConvertor/input
|
||||
Localization/StringsConvertor/input
|
||||
Localization/StringsConvertor/output
|
||||
.DS_Store
|
||||
|
||||
env/**/**
|
||||
!env/.env
|
||||
.DS_Store
|
|
@ -1,6 +1,6 @@
|
|||
//
|
||||
// AppSecret.swift
|
||||
// MastodonCore
|
||||
// AppShared
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-4-27.
|
||||
//
|
||||
|
@ -9,8 +9,8 @@
|
|||
import Foundation
|
||||
import CryptoKit
|
||||
import KeychainAccess
|
||||
import Keys
|
||||
import MastodonCommon
|
||||
import ArkanaKeys
|
||||
|
||||
public final class AppSecret {
|
||||
|
||||
|
@ -36,12 +36,12 @@ public final class AppSecret {
|
|||
}()
|
||||
|
||||
init() {
|
||||
let keys = MastodonKeys()
|
||||
|
||||
#if DEBUG
|
||||
let keys = Keys.Debug()
|
||||
self.notificationEndpoint = keys.notificationEndpoint
|
||||
self.notificationEndpoint = keys.notification_endpoint_debug
|
||||
#else
|
||||
let keys = Keys.Release()
|
||||
self.notificationEndpoint = keys.notificationEndpoint
|
||||
self.notificationEndpoint = keys.notification_endpoint
|
||||
#endif
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
//
|
||||
// AppShared.h
|
||||
// AppShared
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-4-27.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
//! Project version number for AppShared.
|
||||
FOUNDATION_EXPORT double AppSharedVersionNumber;
|
||||
|
||||
//! Project version string for AppShared.
|
||||
FOUNDATION_EXPORT const unsigned char AppSharedVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <AppShared/PublicHeader.h>
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.4.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>121</string>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,13 +1,12 @@
|
|||
//
|
||||
// UserDefaults+Notification.swift
|
||||
// MastodonCommon
|
||||
// AppShared
|
||||
//
|
||||
// Created by Cirno MainasuK on 2021-10-9.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import CryptoKit
|
||||
import MastodonExtension
|
||||
|
||||
extension UserDefaults {
|
||||
// always use hash value (SHA256) from accessToken as key
|
||||
|
@ -39,15 +38,3 @@ extension UserDefaults {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
extension UserDefaults {
|
||||
|
||||
@objc public dynamic var notificationBadgeCount: Int {
|
||||
get {
|
||||
register(defaults: [#function: 0])
|
||||
return integer(forKey: #function)
|
||||
}
|
||||
set { self[#function] = newValue }
|
||||
}
|
||||
|
||||
}
|
|
@ -1,12 +1,13 @@
|
|||
# Acknowledgments
|
||||
|
||||
- [Alamofire](https://github.com/Alamofire/Alamofire)
|
||||
- [AlamofireImage](https://github.com/Alamofire/AlamofireImage)
|
||||
- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator)
|
||||
- [Arkana](https://github.com/rogerluan/arkana)
|
||||
- [Alamofire](https://github.com/Alamofire/Alamofire)
|
||||
- [CommonOSLog](https://github.com/mainasuk/CommonOSLog)
|
||||
- [CryptoSwift](https://github.com/krzyzanowskim/CryptoSwift)
|
||||
- [DateToolSwift](https://github.com/MatthewYork/DateTools)
|
||||
- [DiffableDataSources](https://github.com/ra1028/DiffableDataSources)
|
||||
- [DifferenceKit](https://github.com/ra1028/DifferenceKit)
|
||||
- [FLAnimatedImage](https://github.com/Flipboard/FLAnimatedImage)
|
||||
- [FLEX](https://github.com/FLEXTool/FLEX)
|
||||
- [FPSIndicator](https://github.com/MainasuK/FPSIndicator)
|
||||
|
@ -25,10 +26,9 @@
|
|||
- [SwiftGen](https://github.com/SwiftGen/SwiftGen)
|
||||
- [SwiftUI-Introspect](https://github.com/siteline/SwiftUI-Introspect)
|
||||
- [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)
|
||||
- [TabBarPager](https://github.com/TwidereProject/TabBarPager)
|
||||
- [Tabman](https://github.com/uias/Tabman)
|
||||
- [TwidereX-iOS](https://github.com/TwidereProject/TwidereX-iOS)
|
||||
- [ThirdPartyMailer](https://github.com/vtourraine/ThirdPartyMailer)
|
||||
- [TOCropViewController](https://github.com/TimOliver/TOCropViewController)
|
||||
- [TwidereX-iOS](https://github.com/TwidereProject/TwidereX-iOS)
|
||||
- [TwitterProfile](https://github.com/OfTheWolf/TwitterProfile)
|
||||
- [UITextView-Placeholder](https://github.com/devxoul/UITextView-Placeholder)
|
||||
- [UITextView-Placeholder](https://github.com/devxoul/UITextView-Placeholder)
|
|
@ -1,30 +1,30 @@
|
|||
# Contributing
|
||||
|
||||
- File an issue to report a bug or feature request
|
||||
- File the issue for bug report and feature request
|
||||
- Translate the project in our [Crowdin](https://crowdin.com/project/mastodon-for-ios) project
|
||||
- Make the Pull Request to contribute
|
||||
|
||||
## Bug Report
|
||||
File an issue about the bug or feature request. Make sure you are installing the latest version of the app from TestFlight or App Store.
|
||||
File the issue about the bug. Make sure you are installing the latest version app from TestFlight or App Store.
|
||||
|
||||
## Translation
|
||||
[![Crowdin](https://badges.crowdin.net/mastodon-for-ios/localized.svg)](https://crowdin.com/project/mastodon-for-ios)
|
||||
|
||||
The translation will update regularly. Please request the language if it is not listed via an issue.
|
||||
The translation will update regularly. Please request language if not listed via issue.
|
||||
|
||||
## Pull Request
|
||||
|
||||
You can create a pull request directly with small block code changes for bugfix or feature implementations. Before making a pull request with hundred lines of changes to this repository, please first discuss the change you wish to make via an issue.
|
||||
You can make a pull request directly with small block code changes for bugfix or feature implementations. Before making a pull request with hundred lines of changes to this repository, please first discuss the change you wish to make via issue.
|
||||
|
||||
Also, there are lots of existing feature request issues that could be a good-first-issue discussing place.
|
||||
|
||||
Follow the git-flow pattern to make your pull request.
|
||||
|
||||
1. Ensure you have started a new branch based on the `develop` branch.
|
||||
2. Write your changes and test them on **iPad and iPhone**.
|
||||
3. Merge the `develop` branch into your branch then make a Pull Request. Please merge the branch and resolve any conflicts if `develop` updates. **Do not force push your commits.**
|
||||
4. Make sure the permission for your fork is open to the reviewer. Code style fix, conflict resolution, and other changes may be committed by the reviewer directly.
|
||||
1. Ensure you are checkout on the `develop` branch.
|
||||
2. Write your codes and test them on **iPad and iPhone**.
|
||||
3. Merge the `develop` into your branch then make a Pull Request. Please merge the branch and resolve any conflicts when the `develop` updates. **Do not force push your codes.**
|
||||
4. Make sure the permission for your folk is open to the reviewer. Code style fix, conflict resolution, and other changes may be committed by the reviewer directly.
|
||||
5. Request a code review and wait for approval. The PR will be merged when it is approved.
|
||||
|
||||
## Documentation
|
||||
The documentation for this app is listed under the [Documentation](../Documentation/) folder. We are also welcoming contributions for documentation.
|
||||
The documents for this app is list under the [Documentation](../Documentation/) folder. We are also welcome contributions for documentation.
|
|
@ -7,18 +7,17 @@
|
|||
- iOS 14.0+
|
||||
|
||||
|
||||
Install the latest version of Xcode from the App Store or Apple Developer Download website. Also, we assert you have the [Homebrew](https://brew.sh) package manager.
|
||||
Intell the latest version of Xcode from the App Store or Apple Developer Download website. Also, we assert you have the [Homebrew](https://brew.sh) package manager.
|
||||
|
||||
This guide may not suit your machine and actually setup procedure may change in the future. Please file the issue or Pull Request if there are any problems.
|
||||
|
||||
## CocoaPods
|
||||
The app use [CocoaPods]() and [Arkana](https://github.com/rogerluan/arkana). Ruby Gems are managed through Bundler. The M1 Mac needs virtual ruby env to workaround compatibility issues. Make sure you have [Rosetta](https://support.apple.com/en-us/HT211861) installed if you are using the M1 Mac.
|
||||
The app use [CocoaPods]() and [CocoaPods-Keys](https://github.com/orta/cocoapods-keys). The M1 Mac needs virtual ruby env to workaround compatibility issues.
|
||||
|
||||
#### Intel Mac
|
||||
|
||||
```zsh
|
||||
gem install bundler
|
||||
bundle install
|
||||
sudo gem install cocoapods cocoapods-keys
|
||||
```
|
||||
|
||||
#### M1 Mac
|
||||
|
@ -41,39 +40,31 @@ rbenv global 3.0.3
|
|||
ruby --version
|
||||
# > ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]
|
||||
|
||||
gem install bundler
|
||||
bundle install
|
||||
sudo gem install cocoapods cocoapods-keys
|
||||
```
|
||||
|
||||
## Bootstrap
|
||||
|
||||
```zsh
|
||||
# make a clean build
|
||||
bundle install
|
||||
bundle exec pod clean
|
||||
|
||||
# setup arkana
|
||||
# please check the `.env.example` to create your's or use the empty example directly
|
||||
bundle exec arkana -e ./env/.env
|
||||
|
||||
# clean pods
|
||||
bundle exec pod clean
|
||||
sudo gem install cocoapods-clean
|
||||
pod clean
|
||||
|
||||
# make install
|
||||
bundle exec pod install --repo-update
|
||||
pod install --repo-update
|
||||
|
||||
# open workspace
|
||||
open Mastodon.xcworkspace
|
||||
```
|
||||
|
||||
The Arkana plugin will setup the push notification endpoint. You can use the empty template from `./env/.env` or use your own `.env` file. To setup the push notification. Please check section `Push Notification` below.
|
||||
The CocoaPods-Key plugin will request the push notification endpoint. You can fufill the empty string and set it later. To setup the push notification. Please check section `Push Notification` below.
|
||||
|
||||
The app requires the `App Group` capability. To make sure it works for your developer membership. Please check [AppSecret.swift](../MastodonSDK/Sources/MastodonCore/AppSecret.swift) file and set another unique `groupID` and update `App Group` settings.
|
||||
The app requires the `App Group` capability. To make sure it works for your developer membership. Please check [AppSecret.swift](../AppShared/AppSecret.swift) file and set another unique `groupID` and update `App Group` settings.
|
||||
|
||||
#### Push Notification (Optional)
|
||||
The app is compatible with [toot-relay](https://github.com/DagAgren/toot-relay) APNs. You can set your push notification endpoint via Arkana. There are two endpoints:
|
||||
- NotificationEndpointDebug: for `DEBUG` usage. e.g. `https://<your.domin>/relay-to/development`
|
||||
- NotificationEndpointRelease: for `RELEASE` usage. e.g. `https://<your.domin>/relay-to/production`
|
||||
The app is compatible with [toot-relay](https://github.com/DagAgren/toot-relay) APNs. You can set your push notification endpoint via Cocoapod-Keys. There are two endpoints:
|
||||
- notification_endpoint: for `RELEASE` usage
|
||||
- notification_endpoint_debug: for `DEBUG` usage
|
||||
|
||||
Please check the [Establishing a Certificate-Based Connection to APNs
|
||||
](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) document to generate the certificate and exports the p12 file.
|
||||
|
@ -89,4 +80,4 @@ Please check and set the `notification.Topic` to the app BundleID in [toot-relay
|
|||
|
||||
## What's next
|
||||
|
||||
We welcome contributions! And if you have an interest to contribute codes. Here is a document that describes the app architecture and what's tech stack it uses.
|
||||
We welcome contributions! And if you have an interest to contribute codes. Here is a document that describes the app architecture and what's tech stack it uses.
|
|
@ -14,7 +14,7 @@ We use `xcodebuild` CLI tool to trigger UITest.
|
|||
Set the `name` in `-destination` option to add device for snapshot. For example:
|
||||
`-destination 'platform=iOS Simulator,name=iPad Pro (12.9-inch) (5th generation)' \`
|
||||
|
||||
You can list the available simulators:
|
||||
You can list the avaiable simulator:
|
||||
```zsh
|
||||
# list the destinations
|
||||
xcodebuild \
|
||||
|
|
7
Gemfile
7
Gemfile
|
@ -1,7 +0,0 @@
|
|||
source "https://rubygems.org"
|
||||
|
||||
gem 'arkana'
|
||||
gem "cocoapods"
|
||||
gem "cocoapods-clean"
|
||||
gem "xcpretty"
|
||||
|
114
Gemfile.lock
114
Gemfile.lock
|
@ -1,114 +0,0 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
rexml
|
||||
activesupport (6.1.7)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
algoliasearch (1.27.5)
|
||||
httpclient (~> 2.8, >= 2.8.3)
|
||||
json (>= 1.5.1)
|
||||
arkana (1.2.0)
|
||||
colorize (~> 0.8)
|
||||
dotenv (~> 2.7)
|
||||
yaml (~> 0.2)
|
||||
atomos (0.1.3)
|
||||
claide (1.1.0)
|
||||
cocoapods (1.11.3)
|
||||
addressable (~> 2.8)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
cocoapods-core (= 1.11.3)
|
||||
cocoapods-deintegrate (>= 1.0.3, < 2.0)
|
||||
cocoapods-downloader (>= 1.4.0, < 2.0)
|
||||
cocoapods-plugins (>= 1.0.0, < 2.0)
|
||||
cocoapods-search (>= 1.0.0, < 2.0)
|
||||
cocoapods-trunk (>= 1.4.0, < 2.0)
|
||||
cocoapods-try (>= 1.1.0, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
escape (~> 0.0.4)
|
||||
fourflusher (>= 2.3.0, < 3.0)
|
||||
gh_inspector (~> 1.0)
|
||||
molinillo (~> 0.8.0)
|
||||
nap (~> 1.0)
|
||||
ruby-macho (>= 1.0, < 3.0)
|
||||
xcodeproj (>= 1.21.0, < 2.0)
|
||||
cocoapods-clean (0.0.1)
|
||||
cocoapods-core (1.11.3)
|
||||
activesupport (>= 5.0, < 7)
|
||||
addressable (~> 2.8)
|
||||
algoliasearch (~> 1.0)
|
||||
concurrent-ruby (~> 1.1)
|
||||
fuzzy_match (~> 2.0.4)
|
||||
nap (~> 1.0)
|
||||
netrc (~> 0.11)
|
||||
public_suffix (~> 4.0)
|
||||
typhoeus (~> 1.0)
|
||||
cocoapods-deintegrate (1.0.5)
|
||||
cocoapods-downloader (1.6.3)
|
||||
cocoapods-plugins (1.0.0)
|
||||
nap
|
||||
cocoapods-search (1.0.1)
|
||||
cocoapods-trunk (1.6.0)
|
||||
nap (>= 0.8, < 2.0)
|
||||
netrc (~> 0.11)
|
||||
cocoapods-try (1.2.0)
|
||||
colored2 (3.1.2)
|
||||
colorize (0.8.1)
|
||||
concurrent-ruby (1.1.10)
|
||||
dotenv (2.8.1)
|
||||
escape (0.0.4)
|
||||
ethon (0.15.0)
|
||||
ffi (>= 1.15.0)
|
||||
ffi (1.15.5)
|
||||
fourflusher (2.3.1)
|
||||
fuzzy_match (2.0.4)
|
||||
gh_inspector (1.1.3)
|
||||
httpclient (2.8.3)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
json (2.6.2)
|
||||
minitest (5.16.3)
|
||||
molinillo (0.8.0)
|
||||
nanaimo (0.3.0)
|
||||
nap (1.1.0)
|
||||
netrc (0.11.0)
|
||||
public_suffix (4.0.7)
|
||||
rexml (3.2.5)
|
||||
rouge (2.0.7)
|
||||
ruby-macho (2.5.1)
|
||||
typhoeus (1.4.0)
|
||||
ethon (>= 0.9.0)
|
||||
tzinfo (2.0.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
xcodeproj (1.22.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.3.0)
|
||||
rexml (~> 3.2.4)
|
||||
xcpretty (0.3.0)
|
||||
rouge (~> 2.0.7)
|
||||
yaml (0.2.0)
|
||||
zeitwerk (2.6.3)
|
||||
|
||||
PLATFORMS
|
||||
arm64-darwin-21
|
||||
arm64-darwin-22
|
||||
x86_64-darwin-21
|
||||
x86_64-darwin-22
|
||||
|
||||
DEPENDENCIES
|
||||
arkana
|
||||
cocoapods
|
||||
cocoapods-clean
|
||||
xcpretty
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.17
|
|
@ -13,15 +13,15 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>no unread notifications</string>
|
||||
<string>no unread notification</string>
|
||||
<key>one</key>
|
||||
<string>1 unread notification</string>
|
||||
<key>few</key>
|
||||
<string>%ld unread notifications</string>
|
||||
<key>many</key>
|
||||
<string>%ld unread notifications</string>
|
||||
<string>%ld unread notification</string>
|
||||
<key>other</key>
|
||||
<string>%ld unread notifications</string>
|
||||
<string>%ld unread notification</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>a11y.plural.count.input_limit_exceeds</key>
|
||||
|
@ -67,59 +67,6 @@
|
|||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>a11y.plural.count.characters_left</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@character_count@ left</string>
|
||||
<key>character_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>no characters</string>
|
||||
<key>one</key>
|
||||
<string>1 character</string>
|
||||
<key>few</key>
|
||||
<string>%ld characters</string>
|
||||
<key>many</key>
|
||||
<string>%ld characters</string>
|
||||
<key>other</key>
|
||||
<string>%ld characters</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.followed_by_and_mutual</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@names@%#@count_mutual@</string>
|
||||
<key>names</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>other</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>count_mutual</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>Followed by %1$@</string>
|
||||
<key>one</key>
|
||||
<string>Followed by %1$@, and another mutual</string>
|
||||
<key>few</key>
|
||||
<string>Followed by %1$@, and %ld mutuals</string>
|
||||
<key>many</key>
|
||||
<string>Followed by %1$@, and %ld mutuals</string>
|
||||
<key>other</key>
|
||||
<string>Followed by %1$@, and %ld mutuals</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.metric_formatted.post</key>
|
||||
<dict>
|
||||
|
@ -143,28 +90,6 @@
|
|||
<string>posts</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.media</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>%#@media_count@</string>
|
||||
<key>media_count</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>ld</string>
|
||||
<key>zero</key>
|
||||
<string>0 media</string>
|
||||
<key>one</key>
|
||||
<string>1 media</string>
|
||||
<key>few</key>
|
||||
<string>%ld media</string>
|
||||
<key>many</key>
|
||||
<string>%ld media</string>
|
||||
<key>other</key>
|
||||
<string>%ld media</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>plural.count.post</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
|
|
|
@ -1,34 +1,23 @@
|
|||
# Localization
|
||||
[![Crowdin](https://badges.crowdin.net/mastodon-for-ios/localized.svg)](https://crowdin.com/project/mastodon-for-ios)
|
||||
|
||||
We use Crowdin for translations and some automation.
|
||||
Mastodon localization template file
|
||||
|
||||
## How to contribute
|
||||
|
||||
### Help with translations
|
||||
## How to contribute?
|
||||
|
||||
Head over [Crowdin][crowdin-mastodon-ios] for that. To help with translations, select your language and translate :-) If your language is not in the list, please feel free to [open a topic on Crowdin](crowdin-mastodon-ios-discussions).
|
||||
Please use the [Crodwin](https://crowdin.com/project/mastodon-for-ios) to contribute. If your language is not in the list. Please feel free to open the issue.
|
||||
|
||||
Please note: You need to have an account on Crowdin to help with translations.
|
||||
## How to maintains
|
||||
|
||||
### Add new strings
|
||||
The project use a script to generate Xcode localized strings files.
|
||||
|
||||
This is mainly for developers.
|
||||
```zsh
|
||||
// enter workdir
|
||||
cd Mastodon
|
||||
|
||||
1. Add new strings in `Localization/app.json` **and** the `Localizable.strings` for English.
|
||||
2. Run `swiftgen` to generate the `Strings.swift`-file **or** have Xcode build the app (`swiftgen` is a Build phase, too).
|
||||
3. Use `import MastodonLocalization` and its (new) `L10n`-enum and its properties where ever you need them in the app.
|
||||
4. Once the updated `Localization/app.json` hits `develop`, it gets synced to Crowdin, where people can help with translations. `Localization/app.json` must be a valid json.
|
||||
// merge PR from Crowdin bot
|
||||
|
||||
## How to update translations
|
||||
|
||||
If there are new translations, Crowdin pushes new commits to a branch called `l10n_develop` and creates a new Pull Request. Both, the branch and the PR might be updated once an hour. The project itself uses a script to generate the various `Localizable.strings`-files etc. for Xcode.
|
||||
|
||||
To update or add new translations, the workflow is as follows:
|
||||
|
||||
1. Merge the PR with `l10n_develop` into `develop`. It's usually called `New Crowdin Updates`
|
||||
2. Run `update.localization.sh` on your computer.
|
||||
3. Commit the changes and push `develop`.
|
||||
|
||||
[crowdin-mastodon-ios]: https://crowdin.com/project/mastodon-for-ios
|
||||
[crowdin-mastodon-ios-discussions]: https://crowdin.com/project/mastodon-for-ios/discussions
|
||||
// update resource
|
||||
./update_localization.sh
|
||||
```
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Příspěvek na Mastodon";
|
||||
|
||||
"751xkl" = "Textový obsah";
|
||||
|
||||
"CsR7G2" = "Příspěvek na Mastodon";
|
||||
|
||||
"HZSGTr" = "Jaký obsah se má přidat?";
|
||||
|
||||
"HdGikU" = "Odeslání se nezdařilo";
|
||||
|
||||
"KDNTJ4" = "Důvod selhání";
|
||||
|
||||
"RHxKOw" = "Odeslat příspěvek s textovým obsahem";
|
||||
|
||||
"RxSqsb" = "Příspěvek";
|
||||
|
||||
"WCIR3D" = "Zveřejnit ${content} na Mastodon";
|
||||
|
||||
"ZKJSNu" = "Příspěvek";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Viditelnost";
|
||||
|
||||
"Zo4jgJ" = "Viditelnost příspěvku";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Existuje ${count} možností odpovídajících 'Veřejný'.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Existuje ${count} možností, které odpovídají „jen sledujícím“.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, veřejné";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, pouze sledující";
|
||||
|
||||
"dUyuGg" = "Příspěvek na Mastodon";
|
||||
|
||||
"dYQ5NN" = "Veřejný";
|
||||
|
||||
"ehFLjY" = "Pouze sledující";
|
||||
|
||||
"gfePDu" = "Odeslání se nezdařilo. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Příspěvek byl úspěšně odeslán.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Jen pro kontrolu, chtěli jste „Veřejný“?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Jen pro kontrolu, chtěli jste „Pouze sledující“?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Příspěvek byl úspěšně odeslán. ";
|
|
@ -1,46 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Existuje %#@count_option@ odpovídající „${content}“.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>few</key>
|
||||
<string>%ld options</string>
|
||||
<key>many</key>
|
||||
<string>%ld options</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>few</key>
|
||||
<string>%ld options</string>
|
||||
<key>many</key>
|
||||
<string>%ld options</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Publicar en Mastodon";
|
||||
|
||||
"751xkl" = "Texto a incluír";
|
||||
|
||||
"CsR7G2" = "Publicar en Mastodon";
|
||||
|
||||
"HZSGTr" = "Cal é o contido a publicar?";
|
||||
|
||||
"HdGikU" = "Fallou a publicación";
|
||||
|
||||
"KDNTJ4" = "Razón do fallo";
|
||||
|
||||
"RHxKOw" = "Enviar Publicación con texto";
|
||||
|
||||
"RxSqsb" = "Publicación";
|
||||
|
||||
"WCIR3D" = "Publicar ${content} en Mastodon";
|
||||
|
||||
"ZKJSNu" = "Publicación";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Visibilidade";
|
||||
|
||||
"Zo4jgJ" = "Visibilidade da publicación";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Hai ${count} opcións que coinciden con ‘Público’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Hai ${count} opcións que coinciden con 'Só seguidoras’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Público";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Só seguidoras";
|
||||
|
||||
"dUyuGg" = "Publicar en Mastodon";
|
||||
|
||||
"dYQ5NN" = "Público";
|
||||
|
||||
"ehFLjY" = "Só seguidoras";
|
||||
|
||||
"gfePDu" = "Fallou a publicación. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Publicación correcta.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Só para confirmar, querías ’Público'?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Só para confirmar, querías ’Só para seguidoras'?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Publicación correcta. ";
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Hai %#@count_option@ coincidencias con '${content}'.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 opción</string>
|
||||
<key>other</key>
|
||||
<string>%ld opcións</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Hai %#@count_option@ coincidentes con '${visibility}'.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 opción</string>
|
||||
<key>other</key>
|
||||
<string>%ld opcións</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Birta á Mastodon";
|
||||
|
||||
"751xkl" = "Efni texta";
|
||||
|
||||
"CsR7G2" = "Birta á Mastodon";
|
||||
|
||||
"HZSGTr" = "Hvaða efni á að birta?";
|
||||
|
||||
"HdGikU" = "Birting færslu mistókst";
|
||||
|
||||
"KDNTJ4" = "Ástæða bilunar";
|
||||
|
||||
"RHxKOw" = "Senda færslu með textaefni";
|
||||
|
||||
"RxSqsb" = "Færsla";
|
||||
|
||||
"WCIR3D" = "Birta ${content} á Mastodon";
|
||||
|
||||
"ZKJSNu" = "Færsla";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Sýnileiki";
|
||||
|
||||
"Zo4jgJ" = "Sýnileiki færslu";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Það eru ${count} valkostir sem samsvara ‘Opinbert’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Það eru ${count} valkostir sem samsvara ‘Einungis fylgjendur’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, opinbert";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, einungis fylgjendur";
|
||||
|
||||
"dUyuGg" = "Birta á Mastodon";
|
||||
|
||||
"dYQ5NN" = "Opinbert";
|
||||
|
||||
"ehFLjY" = "Einungis fylgjendur";
|
||||
|
||||
"gfePDu" = "Birting færslu mistókst. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Það tókst að senda færsluna.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Bara til að staðfesta, þú vildir 'Opinbert'?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Bara til að staðfesta, þú vildir ''Einungis fylgjendur'?";
|
||||
|
||||
"rM6dvp" = "URL-slóð";
|
||||
|
||||
"ryJLwG" = "Það tókst að senda færsluna. ";
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Það eru %#@count_option@ sem samsvara ‘${content}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 valkostur</string>
|
||||
<key>other</key>
|
||||
<string>%ld valkostir</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Það eru %#@count_option@ sem samsvara ‘${visibility}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 valkostur</string>
|
||||
<key>other</key>
|
||||
<string>%ld valkostir</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -29,9 +29,9 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>%ld n uɣewwaṛ</string>
|
||||
<string>1 uɣewwaṛ</string>
|
||||
<key>other</key>
|
||||
<string>%ld n iɣewwaṛen</string>
|
||||
<string>%ld iɣewwaṛen</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Post on Mastodon";
|
||||
|
||||
"751xkl" = "Text Content";
|
||||
|
||||
"CsR7G2" = "Post on Mastodon";
|
||||
|
||||
"HZSGTr" = "What content to post?";
|
||||
|
||||
"HdGikU" = "Posting failed";
|
||||
|
||||
"KDNTJ4" = "Failure Reason";
|
||||
|
||||
"RHxKOw" = "Send Post with text content";
|
||||
|
||||
"RxSqsb" = "Post";
|
||||
|
||||
"WCIR3D" = "Post ${content} on Mastodon";
|
||||
|
||||
"ZKJSNu" = "Post";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Visibility";
|
||||
|
||||
"Zo4jgJ" = "Post Visibility";
|
||||
|
||||
"apSxMG-dYQ5NN" = "There are ${count} options matching ‘Public’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "There are ${count} options matching ‘Followers Only’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Public";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Followers Only";
|
||||
|
||||
"dUyuGg" = "Post on Mastodon";
|
||||
|
||||
"dYQ5NN" = "공개";
|
||||
|
||||
"ehFLjY" = "팔로워 전용";
|
||||
|
||||
"gfePDu" = "게시를 실패했습니다. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "성공적으로 게시물을 전송했습니다.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "확인차 물어보건데, '공개'로 게시하시길 원합니까?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "확인차 물어보건데, '팔로워 전용'으로 게시하시길 원합니까?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "성공적으로 게시물을 전송했습니다. ";
|
|
@ -13,7 +13,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld 개의 옵션</string>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
|
@ -27,7 +27,7 @@
|
|||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>other</key>
|
||||
<string>%ld 개의 옵션</string>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Postar no Mastodon";
|
||||
|
||||
"751xkl" = "Conteúdo do texto";
|
||||
|
||||
"CsR7G2" = "Postar no Mastodon";
|
||||
|
||||
"HZSGTr" = "Qual conteúdo a publicar?";
|
||||
|
||||
"HdGikU" = "Falha na publicação";
|
||||
|
||||
"KDNTJ4" = "Motivo da falha";
|
||||
|
||||
"RHxKOw" = "Enviar postagem com conteúdo de texto";
|
||||
|
||||
"RxSqsb" = "Postagem";
|
||||
|
||||
"WCIR3D" = "Postar ${content} no Mastodon";
|
||||
|
||||
"ZKJSNu" = "Postar";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Visibilidade";
|
||||
|
||||
"Zo4jgJ" = "Visibilidade da publicação";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Existem ${count} opções correspondentes a ‘Público’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Existem ${count} opções correspondentes a ‘Apenas para seguidores’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Público";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Apenas para seguidores";
|
||||
|
||||
"dUyuGg" = "Postar no Mastodon";
|
||||
|
||||
"dYQ5NN" = "Público";
|
||||
|
||||
"ehFLjY" = "Apenas para seguidores";
|
||||
|
||||
"gfePDu" = "Falha na publicação. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Publicação enviada com sucesso.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Só para confirmar, você queria ‘Público’?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Só para confirmar, você queria ‘Apenas para seguidores’?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Publicação enviada com sucesso. ";
|
|
@ -1,38 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Existem %#@count_option@ opções correspondentes a ‘${content}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 opção</string>
|
||||
<key>other</key>
|
||||
<string>%ld opções</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Existem %#@count_option@ opções correspondentes a ‘${visibility}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 opção</string>
|
||||
<key>other</key>
|
||||
<string>%ld opções</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -12,8 +12,6 @@
|
|||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld options</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>other</key>
|
||||
|
@ -30,8 +28,6 @@
|
|||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>zero</key>
|
||||
<string>%ld options</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>other</key>
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
"RHxKOw" = "Send Post with text content";
|
||||
|
||||
"RxSqsb" = "Ziņa";
|
||||
"RxSqsb" = "Post";
|
||||
|
||||
"WCIR3D" = "Post ${content} on Mastodon";
|
||||
|
||||
|
@ -34,9 +34,9 @@
|
|||
|
||||
"dUyuGg" = "Post on Mastodon";
|
||||
|
||||
"dYQ5NN" = "Publisks";
|
||||
"dYQ5NN" = "Public";
|
||||
|
||||
"ehFLjY" = "Tikai sekotājiem";
|
||||
"ehFLjY" = "Followers Only";
|
||||
|
||||
"gfePDu" = "Posting failed. ${failureReason}";
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Objavi na Mastodonu";
|
||||
|
||||
"751xkl" = "besedilo";
|
||||
|
||||
"CsR7G2" = "Objavi na Mastodonu";
|
||||
|
||||
"HZSGTr" = "Kakšno vsebino želite objaviti?";
|
||||
|
||||
"HdGikU" = "Objava ni uspela";
|
||||
|
||||
"KDNTJ4" = "Vzrok za neuspeh";
|
||||
|
||||
"RHxKOw" = "Pošlji objavo z besedilom";
|
||||
|
||||
"RxSqsb" = "Objavi";
|
||||
|
||||
"WCIR3D" = "Objavite ${content} na Mastodonu";
|
||||
|
||||
"ZKJSNu" = "Objavi";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Vidnost";
|
||||
|
||||
"Zo4jgJ" = "Vidnost objave";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Z \"Javno\" se ujema ${count} možnosti.";
|
||||
|
||||
"apSxMG-ehFLjY" = "S \"Samo sledilci\" se ujema ${count} možnosti.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, javno";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, samo sledilci";
|
||||
|
||||
"dUyuGg" = "Objavi na Mastodonu";
|
||||
|
||||
"dYQ5NN" = "Javno";
|
||||
|
||||
"ehFLjY" = "Samo sledilci";
|
||||
|
||||
"gfePDu" = "Objava je spodletela. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Uspešno poslana objava.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Da ne bo nesporazuma - želeli ste \"Javno\"?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Da ne bo nesporazuma - želeli ste \"Samo sledilci\"?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Uspešno poslana objava. ";
|
|
@ -1,46 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Na voljo: %#@count_option@, ki se ujema z "${content}".</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>%ld možnost</string>
|
||||
<key>two</key>
|
||||
<string>%ld možnosti</string>
|
||||
<key>few</key>
|
||||
<string>%ld možnosti</string>
|
||||
<key>other</key>
|
||||
<string>%ld možnosti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>Na voljo: %#@count_option@, ki se ujema z "${visibility}".</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>%ld možnost</string>
|
||||
<key>two</key>
|
||||
<string>%ld možnosti</string>
|
||||
<key>few</key>
|
||||
<string>%ld možnosti</string>
|
||||
<key>other</key>
|
||||
<string>%ld možnosti</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -1,51 +0,0 @@
|
|||
"16wxgf" = "Publicera på Mastodon";
|
||||
|
||||
"751xkl" = "Textinnehåll";
|
||||
|
||||
"CsR7G2" = "Publicera på Mastodon";
|
||||
|
||||
"HZSGTr" = "Vilket innehåll ska publiceras?";
|
||||
|
||||
"HdGikU" = "Publiceringen misslyckades";
|
||||
|
||||
"KDNTJ4" = "Felorsak";
|
||||
|
||||
"RHxKOw" = "Skicka inlägg med textinnehåll";
|
||||
|
||||
"RxSqsb" = "Inlägg";
|
||||
|
||||
"WCIR3D" = "Publicera ${content} på Mastodon";
|
||||
|
||||
"ZKJSNu" = "Inlägg";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Synlighet";
|
||||
|
||||
"Zo4jgJ" = "Inläggssynlighet";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Det finns ${count} alternativ som matchar ‘Offentligt’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Det finns ${count} alternativ som matchar ‘Endast följare’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Offentligt";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Endast följare";
|
||||
|
||||
"dUyuGg" = "Publicera på Mastodon";
|
||||
|
||||
"dYQ5NN" = "Offentligt";
|
||||
|
||||
"ehFLjY" = "Endast följare";
|
||||
|
||||
"gfePDu" = "Kunde inte publicera. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Inlägget har publicerats.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Bara för att bekräfta, ville du ha 'Offentligt'?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Bara för att bekräfta, ville du ha 'Endast följare'?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Inlägget har publicerats. ";
|
|
@ -0,0 +1,51 @@
|
|||
"16wxgf" = "Posta på Mastodon";
|
||||
|
||||
"751xkl" = "Textinnehåll";
|
||||
|
||||
"CsR7G2" = "Posta på Mastodon";
|
||||
|
||||
"HZSGTr" = "Vilket innehåll ska jag posta?";
|
||||
|
||||
"HdGikU" = "Inlägget misslyckades";
|
||||
|
||||
"KDNTJ4" = "Felorsak";
|
||||
|
||||
"RHxKOw" = "Skicka inlägg med textinnehåll";
|
||||
|
||||
"RxSqsb" = "Posta";
|
||||
|
||||
"WCIR3D" = "Posta ${content} på Mastodon";
|
||||
|
||||
"ZKJSNu" = "Posta";
|
||||
|
||||
"ZS1XaK" = "${content}";
|
||||
|
||||
"ZbSjzC" = "Synlighet";
|
||||
|
||||
"Zo4jgJ" = "Inläggssynlighet";
|
||||
|
||||
"apSxMG-dYQ5NN" = "Det finns ${count} alternativ som matchar ‘Publikt’.";
|
||||
|
||||
"apSxMG-ehFLjY" = "Det finns ${count} alternativ som matchar ‘Endast följare’.";
|
||||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Publikt";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Endast följare";
|
||||
|
||||
"dUyuGg" = "Posta på Mastodon";
|
||||
|
||||
"dYQ5NN" = "Publikt";
|
||||
|
||||
"ehFLjY" = "Endast följare";
|
||||
|
||||
"gfePDu" = "Inlägget misslyckades. ${failureReason}";
|
||||
|
||||
"k7dbKQ" = "Inlägget har postats.";
|
||||
|
||||
"oGiqmY-dYQ5NN" = "Bara för att bekräfta, ville du ha 'Publikt'?";
|
||||
|
||||
"oGiqmY-ehFLjY" = "Bara för att bekräfta, ville du ha 'Endast följare'?";
|
||||
|
||||
"rM6dvp" = "URL";
|
||||
|
||||
"ryJLwG" = "Inlägget har postats. ";
|
|
@ -1,46 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>There are ${count} options matching ‘${content}’. - 2</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${content}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>few</key>
|
||||
<string>%ld options</string>
|
||||
<key>many</key>
|
||||
<string>%ld options</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>There are ${count} options matching ‘${visibility}’.</key>
|
||||
<dict>
|
||||
<key>NSStringLocalizedFormatKey</key>
|
||||
<string>There are %#@count_option@ matching ‘${visibility}’.</string>
|
||||
<key>count_option</key>
|
||||
<dict>
|
||||
<key>NSStringFormatSpecTypeKey</key>
|
||||
<string>NSStringPluralRuleType</string>
|
||||
<key>NSStringFormatValueTypeKey</key>
|
||||
<string>%ld</string>
|
||||
<key>one</key>
|
||||
<string>1 option</string>
|
||||
<key>few</key>
|
||||
<string>%ld options</string>
|
||||
<key>many</key>
|
||||
<string>%ld options</string>
|
||||
<key>other</key>
|
||||
<string>%ld options</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
"ayoYEb-dYQ5NN" = "${content}, Công khai";
|
||||
|
||||
"ayoYEb-ehFLjY" = "${content}, Chỉ người theo dõi";
|
||||
"ayoYEb-ehFLjY" = "${content}, Riêng tư";
|
||||
|
||||
"dUyuGg" = "Đăng lên Mastodon";
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue