Skip to content

jerimiah797/metatext

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

916 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Metatext (Unofficial Fork)

A free, open-source iOS Mastodon client.

Note: This is an unofficial fork of metabolist/metatext with bug fixes and compatibility updates. It is not available on the App Store. The upstream project is archived and seeking a maintainer.

This fork is tested against GoToSocial as well as Mastodon servers.

Changes in this fork

  • Xcode 26 / Swift 6 compatibility — builds and runs on the latest toolchain
  • GRDB upgraded to 7.9.0 — uses a forked GRDB with bundled SQLCipher for on-device encryption via SPM
  • Fixed crash on posts with unparseable URLs — empty or malformed URLs from remote instances (commonly custom emoji) no longer cause the entire timeline or post detail to fail to load (NSURLErrorDomain -1000)
  • Fixed Sendable conformance warnings for Swift 6
  • Improved remote profile loading — when visiting a profile hosted on another instance, posts now load automatically via retry instead of requiring the user to back out and reload (particularly noticeable with GoToSocial servers, which fetch remote content asynchronously)
  • Fixed hashtag search results layout — tag cells rendered as tiny illegible lines on servers (like GoToSocial) that don't return tag history data; also increased search debounce to reduce rate limiting
  • Fixed Edit Profile / Account Settings for GoToSocial — uses correct GoToSocial settings URLs and opens them in-browser instead of ASWebAuthenticationSession, which lacks the localStorage needed by GoToSocial's settings panel
  • Fixed hybrid search — federated search results no longer cancel and replace local results
  • Deferred deletion (Delete & re-draft) — deletes a post and opens the composer pre-filled with its content for editing and reposting
  • Fixed scrollbar flicker — eliminated redundant collection view updates that caused visible scrollbar jitter
  • Fixed push notifications for GoToSocial — notification IDs are now parsed as strings (GoToSocial sends string IDs, not integers)
  • Skipped unsupported /trends API for GoToSocial — avoids unnecessary 404 errors on the Explore tab
  • Native status editing — edit published posts via PUT /api/v1/statuses/:id with an "Edited" label on modified posts
  • Filters v2 — full support for Mastodon 4.0+ / GoToSocial 0.17+ filters with .warn (collapse behind warning) and .hide (remove from timeline) actions, per-account v2 toggle, keyword management, client-side fallback for cached posts, and automatic 404 fallback to v1 filters
  • SwiftUI compose screen — rewrote the compose screen in SwiftUI (behind a feature flag) with toolbar, autocomplete, polls, attachments, captioning, emoji picker, and avatar display
  • Custom photo picker — replaced PHPicker with a custom in-process photo picker supporting albums, selection limits, and human-readable error messages for unsupported media formats
  • Accessibility improvements — added accessibility identifiers across all main UI surfaces, content views, compose toolbar, and preferences screens; hid off-screen cells and inactive page views from the accessibility tree for cleaner VoiceOver navigation
  • Fixed timeline performance — resolved a ValueObservation feedback loop causing excessive database re-queries, extended the fix to all observation publishers, and added request deduplication
  • GoToSocial Lists notice — shows an unsupported-feature notice for Lists on GoToSocial servers instead of silently failing
  • Fixed account menu button disappearing after scrolling the timeline
  • Fixed info label color for reblogged and pinned statuses

Contributing Bug Reports

GitHub is used for bug tracking. Please search existing issues and create a new one if the issue is not yet tracked.

Contributing Translations

You can help translate Metatext on CrowdIn.

Contributing Code

See the contribution guidelines.

Note that capacity for reviewing pull requests is currently very limited. For now, please limit the scope of proposed changes to fixing bugs and not added features, settings, or behavior, thanks. If you are interested in doing a larger scope change, please propose it via email at info@metabolist.org first.

Building

To build Metatext:

  • Clone the repository (git clone https://github.com/metabolist/metatext.git)
  • Open Metatext.xcodeproj in Xcode
  • Select the top-level "Metatext" item in Xcode and change the team in each target's "Signing & Capabilities" settings to your own

All dependencies are managed using Swift Package Manager and will automatically be installed by Xcode.

Push Notifications

Push notifications will not work in development builds of Metatext unless you host your own instance of metatext-apns and change the pushSubscriptionEndpointURL constants in IdentityService.swift to its URL.

Architecture

  • Metatext uses the Model–view–viewmodel (MVVM) architectural pattern.
  • View models are clients of a service layer that abstracts network and local database logic.
  • Different levels of the architecture are in different local Swift Packages. import DB and import MastodonAPI should generally only be done within the ServiceLayer package, and import ServiceLayer only within the ViewModels package.

Acknowledgements

Metatext uses the following third-party libraries:

Cryptography Notice

This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See http://www.wassenaar.org/ for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

License

Copyright (C) 2021 Metabolist

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

About

Unofficial fork of Metatext (Mastodon iOS client) with Swift 6 / Xcode 26 compatibility fixes

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Swift 100.0%