Native Jellyfin Client for iOS and tvOS

Overview

Swiftfin

Swiftfin

Swiftfin is a modern client for the Jellyfin media server. Redesigned in Swift to maximize direct play with the power of VLC and look native on all classes of Apple devices.

⚡️ Links!

Join the Beta on TestFlight

Don't see SwiftFin in your language?

Check out our Weblate instance to help translate Swiftfin and other projects.

⚙️ Development

Xcode 13.0 with command line tools.

Build Process

# install Cocoapods (if not installed)
$ sudo gem install cocoapods

# install dependencies
$ pod install

# open workspace and build it
$ open JellyfinPlayer.xcworkspace
Comments
  • Match content on AppleTV

    Match content on AppleTV

    Describe the feature you'd like For people who have set their Apple TV's to Dolby Vision by default, content in HDR or SDR will look off. Wrong colors, tone mapping, etc. Match content as described by apple: Apple TV will use your selected display format to play content without alteration. Apple TV can also switch formats automatically to match the content's frame rate.

    Usually this works automatically, except for anything played by Swiftfin. This could be a limitation of VLCKit, which won't be fixable or an easy solution to just pass the current format to Apple TV.

    enhancement 
    opened by hendrik1120 31
  • Apply Coordinator Pattern and Add Deep-Links

    Apply Coordinator Pattern and Add Deep-Links

    With the Coordinator pattern,

    • Helps to single-responsibility principle (SRP).
    • It collects scattered navigation processing codes into one place.
    • Makes the View lighter.
    • etc...

    Coordinators

    • [x] ConnectToServerCoodinator
    • [x] HomeCoordinator
    • [x] LibraryListCoordinator
    • [x] MainCoordinator
    • [x] MainTabCoordinator
    • [x] SearchCoordinator
    • [x] SettingsCoordinator
    • [x] LibraryCoordinator
    • [x] ItemCoordinator
    • [x] FilterCoordinator
    • [x] VideoPlayerCoordinator

    Deep-Links

    • [x] jellyfin://Users/{UserID}/Items/{ItemID}

    Feel free to leave any advice on the current structure!

    enhancement 
    opened by PangMo5 31
  • External subtitles are not displayed

    External subtitles are not displayed

    Describe the bug

    All external subtitles are not displayed.

    No matter the format of external subtitles is srt or ass can not be displayed.

    Embedded subtitles can be displayed.

    The video formats tested are all mkv.

    Application version

    1.0.0(74)

    Where did you install the app from?

    TestFlight

    Device information

    iPhone 12 Pro

    OS version

    IOS 15.4.1

    Jellyfin server version

    10.8.0(docker nyanmisaka/jellyfin)

    bug 
    opened by RayYoLin 28
  • M1 iPad Pro - Latest testflight refuses to play any video

    M1 iPad Pro - Latest testflight refuses to play any video

    Updated from 67 to 68 and now videos no longer play. This is independent of encoding or container, and effects my entire library. I get a strange result in my log every time I go to play a video, seen below.

    2022-01-13 04:55:21.229 +00:00] [INF] [21] Jellyfin.Api.Controllers.MediaInfoController: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: null, MaxAlbumArtHeight: null, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 60000000, MaxStaticBitrate: 60000000, MusicStreamingTranscodingBitrate: 60000000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mov,mp4,mkv,webm", AudioCodec: "aac,mp3,wav,ac3,eac3,flac,truehd,dts,dca,opus", VideoCodec: "h264,hevc,dvhe,dvh1,h264,hevc,hev1,mpeg4,vp9", Type: Video }], TranscodingProfiles: [TranscodingProfile { Container: "ts", Type: Video, VideoCodec: "hevc,h264,mpeg4", AudioCodec: "aac,mp3,wav,ac3,eac3,flac,opus", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: "6", MinSegments: 2, SegmentLength: 0, BreakOnNonKeyFrames: True }], ContainerProfiles: [], CodecProfiles: [CodecProfile { Type: Video, Conditions: [], ApplyConditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|baseline|constrained baseline", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "80", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], Codec: "h264", Container: null }, CodecProfile { Type: Video, Conditions: [], ApplyConditions: [ProfileCondition { Condition: NotEquals, Property: IsAnamorphic, Value: "true", IsRequired: False }, ProfileCondition { Condition: EqualsAny, Property: VideoProfile, Value: "high|main|main 10", IsRequired: False }, ProfileCondition { Condition: LessThanEqual, Property: VideoLevel, Value: "175", IsRequired: False }, ProfileCondition { Condition: NotEquals, Property: IsInterlaced, Value: "true", IsRequired: False }], Codec: "hevc", Container: null }], ResponseProfiles: [ResponseProfile { Container: "m4v", AudioCodec: null, VideoCodec: null, Type: Video, OrgPn: null, MimeType: "video/mp4", Conditions: [] }], SubtitleProfiles: [SubtitleProfile { Format: "ass", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "subrip", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "sub", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "pgssub", Method: Embed, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "subrip", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "sub", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "vtt", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ass", Method: External, DidlMode: null, Language: null, Container: null }, SubtitleProfile { Format: "ssa", Method: External, DidlMode: null, Language: null, Container: null }] }

    On M1 iPad Pro, with Jellyfin on 10.8.0 alpha 5, however issue existed on 10.7.7. In the dashboard, it shows the video as actively playing, but paused, and reports it as direct playing. However the video never begins.

    bug 
    opened by harryofbath 27
  • Applying MVVM and Moya on some screens, Changed filter structure

    Applying MVVM and Moya on some screens, Changed filter structure

    Changed

    • Add JellyfinAPI
    • Add Filter struct, API related enums
    • Add LibraryListViewModel, LibraryViewModel, LibrarySearchViewModel
    • ~Change a specific toolbar to a navigation bar item.~
    • Separate LibraryView and LibraryListView.
    • Change to present SettingsView as sheet

    Known issues

    ~- UI cannot be updated after loading when entering LibraryView in MovieItemView and EpisodeItemView. (Since it works normally when entering from another screen, there seems to be a problem in the life cycle of the MovieItemView and EpisodeItemView.)~ -> Life cycle issues of SwiftUI(NavigationLink) solved as Lazy

    And it seems that there are a lot of @State, @EnvironmentObject, and ObservableObject that are not currently used in a lot of code. It would be nice to increase the performance by refactoring the related code.

    I'm sorry that the commits weren't cleaned up as I modified a lot of code at once.

    enhancement 
    opened by PangMo5 24
  • Player doesn’t start any video

    Player doesn’t start any video

    Describe the bug

    Hi, whatever video, movie or tv show I try to play on Swiftfin doesn’t start:

    9D5947C1-7771-4A8A-AA73-88132B9BE7A7

    The play button is unresponsive, just grey out after tapping, then again white and the screen stays black, same thing for any other control.

    Thank you.

    Application version

    1.0.0 (74)

    Where did you install the app from?

    TestFlight

    Device information

    iPhone 11 Pro

    OS version

    iOS 15.4.1

    Jellyfin server version

    10.7.7 stable

    bug 
    opened by KuerosN 20
  • tvOS Recommendations

    tvOS Recommendations

    Hello

    First of all, I find your app very well on its way to being the best. I love the media view with the big fanart it's great.

    I have 3 Apple TVs of different generations and Jellyfin Native works well, can be a bit media loading but acceptable.

    Many questions on the continuation of your development:

    Is it possible to add an 'add to favorites' button next to the play button and put on the right, the synopsis of the media? Which will balance the bottom line

    Will there be media image chapters?

    Consider creating a home screen unlike any other popular app, much like the Apple TV app where all new media or media to watch will appear at the bottom with the fanart behind it ?

    Will there be a light mode as offered by TVOS ?

    There will be an option to switch the covers to landscape mode because all the fanarts are available on Jellyfin server ?

    Thank you for creating Jellyfin Native, I love it and happy new year !!!

    enhancement 
    opened by G10vanni74 19
  • Folders with specific caracters

    Folders with specific caracters

    When folder name begins with @before names, Swiftfin cannot access the files & subfolders under it.

    examples:

    "/Movies" is seen and can play "/@Somesmovies" is not seen & files under it cannot be accessed.

    opened by Estarna 18
  • TestFlight beta is full

    TestFlight beta is full

    Describe the feature you'd like

    Hello! I’d like to join the TestFlight beta, but it is reporting that it is full. Are there any more available seats?

    enhancement 
    opened by keithamus 17
  • 4K HEVC Playback not working on iPhone Xr, iPad 7

    4K HEVC Playback not working on iPhone Xr, iPad 7

    I am currently testing the app with my devices. I have an iPad 7th Gen and an iPhone Xr, both running the atm newest ios/ipadOS release (14.6).

    On both devices, AV1 playback does not seem to work. When trying to play back the "Summer Nature" 4k file from (https://www.elecard.com/videos), playback does not start. On the server side I see that the app is requesting direct play, which I would assume is correct since the VLC backend should support AV1. Same thing happens with the 1080p version of that file.

    I also cannot play 4k HEVC files. Media info of one affected file:

    Title4K HEVC HDR
    CodecHEVC
    ProfileMain 10
    Level153
    Resolution3840x2160
    Aspect ratio16:9
    InterlacedNo
    Framerate23.976025
    Bitrate63173 kbps
    Video rangeHDR
    Color spacebt2020nc
    Color transfersmpte2084
    Color primariesbt2020
    Pixel formatyuv420p10le
    Ref frames1
    

    This movie can be direct played by the iphone using the web-app with the native player option enabled.

    Anyways, thanks for the amazing work so far!

    bug 
    opened by SlaterTh90 17
  • slow content loading

    slow content loading

    When I open or navigate through the different sections of the app, it takes more than 15 seconds to load the covers, from the web browser, this does not happen to me.

    bug 
    opened by Sicer 17
  • Transcoding when it shouldn't be

    Transcoding when it shouldn't be

    Describe the bug

    I'm running the latest version of the Jellyfin server (10.8.8) and the current release of Swiftfin on an Apple TV 4K. I go to playback various 4K files from my server, and the Server claims it's doing direct play but when I look at top and CPU usage the server is actually maxed out and doing ffmpeg transcoding it appears.

    Application version

    1.0.0

    Where did you install the app from?

    App Store

    Device information

    Apple TV 4K 2021

    OS version

    tvOS 16

    Jellyfin server version

    10.8.8

    bug 
    opened by Quantas 0
  • Live TV is transcoded for no reson(?)

    Live TV is transcoded for no reson(?)

    Describe the bug

    1. Go to Settings -> Experimental -> check Live TV (Alpha)
    2. Play any channel

    Every mpeg2video stream is transcoded, but should play direct with vlckit — if I'm not mistaken? Enabling 'Live TV Force Direct Play' produces a black screen only.

    [2023-01-02 19:25:19.309 +01:00] [INF] [48] TVHeadEnd.AccessTicketHandler: [TVHclient] AccessTicketHandler.GetAccessTicket: New ticket (#"6") created for "channelId"="2091000146"
    [2023-01-02 19:25:19.309 +01:00] [INF] [48] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "USER". EnablePlaybackRemuxing: True EnableVideoPlaybackTranscoding: True EnableAudioPlaybackTranscoding: True
    [2023-01-02 19:25:19.310 +01:00] [INF] [48] Jellyfin.Api.Helpers.MediaInfoHelper: StreamBuilder.BuildVideoItem( Profile="Anonymous Profile", Path="http://10.0.1.14:9981/stream/channelid/2091000146?ticket=B22ABBE3C73319B8860D4CC9C87DE896FBBC8EA7", AudioStreamIndex=null, SubtitleStreamIndex=null ) => ( PlayMethod=Transcode, TranscodeReason=VideoCodecNotSupported ) "media:/videos/4f7aafea-0c33-f2fd-38ea-12ee538acb67/master.m3u8?MediaSourceId=2091000146&VideoCodec=hevc,h264,mpeg4&AudioCodec=aac,mp3,wav,ac3,eac3,flac,opus&AudioStreamIndex=-1&VideoBitrate=359360000&AudioBitrate=640000&api_key=<token>&TranscodingMaxAudioChannels=6&RequireAvc=false&SegmentContainer=ts&MinSegments=2&BreakOnNonKeyFrames=True&TranscodeReasons=VideoCodecNotSupported"
    [2023-01-02 19:25:19.931 +01:00] [INF] [61] Jellyfin.Api.Controllers.DynamicHlsController: Current HLS implementation doesn't support non-keyframe breaks but one is requested, ignoring that request
    [2023-01-02 19:25:21.506 +01:00] [INF] [49] Jellyfin.Api.Helpers.TranscodingJobHelper: "/usr/local/bin/ffmpeg" "-analyzeduration 200M -autorotate 0 -i \"http://10.0.1.14:9981/stream/channelid/2091000146?ticket=B22ABBE3C73319B8860D4CC9C87DE896FBBC8EA7\" -map_metadata -1 -map_chapters -1 -threads 0 -sn -codec:v:0 libx265 -tag:v:0 hvc1 -preset superfast -crf 28 -maxrate 215616000 -bufsize 431232000 -x265-params:0 no-info=1 -force_key_frames:0 \"expr:gte(t,n_forced*3)\" -bf 0 -vf \"setparams=color_primaries=bt709:color_trc=bt709:colorspace=bt709,yadif=0:-1:0,format=yuv420p\" -flags -global_header -codec:a:0 aac -ac 6 -ab 384000 -copyts -avoid_negative_ts disabled -max_muxing_queue_size 2048 -f hls -max_delay 5000000 -hls_time 3 -hls_segment_type mpegts -start_number 0 -hls_base_url \"hls/6139c0acdde86b334fcb1397d9f1797c/\" -hls_segment_filename \"/Users/USER/.local/share/jellyfin/transcodes/6139c0acdde86b334fcb1397d9f1797c%d.ts\" -hls_playlist_type event -hls_list_size 0 -y \"/Users/USER/.local/share/jellyfin/transcodes/6139c0acdde86b334fcb1397d9f1797c.m3u8\""
    [2023-01-02 19:25:31.916 +01:00] [WRN] [46] Jellyfin.Server.Middleware.ResponseTimeMiddleware: Slow HTTP Response from "http://10.0.1.4:8096/videos/4f7aafea-0c33-f2fd-38ea-12ee538acb67/live.m3u8?DeviceId=iOS_7852E975-2B14-41FD-9D88-F4A4DD243CF7_1672682541.790236&MediaSourceId=2091000146&VideoCodec=hevc,h264,mpeg4&AudioCodec=aac,mp3,wav,ac3,eac3,flac,opus&AudioStreamIndex=-1&VideoBitrate=359360000&AudioBitrate=640000&PlaySessionId=e712c7f1666d43daa9757775bb68c095&api_key=********&TranscodingMaxAudioChannels=6&RequireAvc=false&SegmentContainer=ts&MinSegments=2&BreakOnNonKeyFrames=True&TranscodeReasons=VideoCodecNotSupported" to "10.0.1.243" in 0:00:11.9860473 with Status Code 200
    

    Application version

    1.0.0 (79)

    Where did you install the app from?

    App Store

    Device information

    iPhone 14

    OS version

    iOS 16.2

    Jellyfin server version

    10.8.8

    bug 
    opened by sprtm 0
  • Quick Connect login not working

    Quick Connect login not working

    Describe the bug

    When I try to use the Quick Connect feature to log in using Swiftfin, it doesn't work.

    Once I type the six-digit code into another authorized device, I get a 401 "Unauthorized User" error in Swiftfin.

    I've verified I can still log in using Quick Connect in the Jellyfin iOS web client app.

    Application version

    1.0.0(79)

    Where did you install the app from?

    App Store

    Device information

    iPad (6th generation)

    OS version

    iPad OS 15.5

    Jellyfin server version

    10.8.8

    bug 
    opened by davemsh 3
  • No movies and m4v not playing

    No movies and m4v not playing

    Describe the bug

    1. Files are not searched on the main page and in the movies folder. Even if I write the name of the movie in the search, the application will not find it.
    2. m4v files won't play, I press play but nothing happens. Can you help me with this?

    Application version

    1.0.0(79)

    Where did you install the app from?

    App Store

    Device information

    iPad 10.2 2021

    OS version

    iPadOS 16.3

    Jellyfin server version

    10.8.8

    bug 
    opened by rozenrod 2
  • No Audio on right channel (5.1 Audio)

    No Audio on right channel (5.1 Audio)

    Describe the bug

    When I try to play any video I don't get audio on the right channel on my 5.1 Setup. I tried transcoded Blu-Ray rips (H.265 high, 5.1 DTS Master, MKV) and raw Blu-Ray rips, but it did not make a difference. To make sure it's not the amp or the speeker i switched to my Blu-Ray player and everything worked perfectly fine.

    Application version

    1.0.0 (84)

    Where did you install the app from?

    TestFlight

    Device information

    Apple TV 4K (A2169)

    OS version

    tvOS 16.1

    Jellyfin server version

    10.8.8

    bug 
    opened by Bastimon 0
Releases(v74)
  • v74(Mar 31, 2022)

    Thank you for using Swiftfin, a native iOS player for Jellyfin!

    Join the Beta on TestFlight

    For Apple TV (without an iOS/iPadOS device)

    If you have an Apple TV and do not own an iOS device, please use this Google Form to get an invitation code.

    Known Issues

    • Chromecast is not available at this time. It will return in a future release. Sorry about that.
    • VLCKit is not compatible with TLS 1.3 at this time. Keep this in mind when configuring a reverse proxy.

    What's Changed

    New Features 🎉

    • Basic support for folder-type library items by @mshockwave in https://github.com/jellyfin/Swiftfin/pull/351
    • Add Keyboard Shortcuts by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/354
    • Re-implement BlurHash by @LePips in https://github.com/jellyfin/Swiftfin/pull/356
    • Add system control gestures by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/366

    New Contributors

    • @mshockwave made their first contribution in https://github.com/jellyfin/Swiftfin/pull/351

    Full Changelog: https://github.com/jellyfin/Swiftfin/compare/v71...v74

    Source code(tar.gz)
    Source code(zip)
  • v71(Jan 28, 2022)

    Thank you for using Swiftfin, a native iOS player for Jellyfin!

    Join the Beta on TestFlight

    For Apple TV (without an iOS/iPadOS device)

    If you have an Apple TV and do not own an iOS device, please use this Google Form to get an invitation code.

    Known Issues

    • Chromecast is not available at this time. It will return in a future release. Sorry about that.
    • VLCKit is not compatible with TLS 1.3 at this time. Keep this in mind when configuring a reverse proxy.

    What's Changed

    New Features 🎉

    • Add Aspect Fill by @LePips in https://github.com/jellyfin/Swiftfin/pull/315
    • Implement Experimental Native Player by @LePips in https://github.com/jellyfin/Swiftfin/pull/320
    • iOS About View and Version by @LePips in https://github.com/jellyfin/Swiftfin/pull/330
    • Enable playback for LiveTV on tvOS by @jhays in https://github.com/jellyfin/Swiftfin/pull/325

    Full Changelog: https://github.com/jellyfin/Swiftfin/compare/v70...v71

    Source code(tar.gz)
    Source code(zip)
  • v70(Jan 20, 2022)

    Thank you for using Swiftfin, a native iOS player for Jellyfin!

    New TestFlight Link

    This build represents what we've currently got on our new TestFlight link. If you were on the previous TestFlight, you will not have access to these new features. You must remove the previous app and use this new one.

    Join the Beta on TestFlight

    For Apple TV (without an iOS/iPadOS device)

    If you have an Apple TV and do not own an iOS device, please use this Google Form to get an invitation code.

    Known Issues

    • Chromecast is not available at this time. It will return in a future release. Sorry about that.
    • VLCKit is not compatible with TLS 1.3 at this time. Keep this in mind when configuring a reverse proxy.

    What's Changed

    • Apply parallax header in SeasonItemView by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/21
    • Applying MVVM and Moya on some screens, Changed filter structure by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/20
    • Add ParallaxHeaderScrollView by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/23
    • Change some ObservedObject to StateObject by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/26
    • Improved image performance by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/29
    • Add Next Up Widgets by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/43
    • Apply SwiftFormat by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/44
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/47
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/52
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/54
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/59
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/61
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/62
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/63
    • Structural improvements - 1 by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/64
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/69
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/70
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/73
    • Structural improvements - 2 by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/72
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/75
    • Remove @Published used for input(keyboard) binding (side effect) by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/78
    • UI Changes by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/83
    • Fix #81 by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/84
    • Add server discovery by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/85
    • tvOS Video Player by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/82
    • Prefer language settings #87 by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/89
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/90
    • Update Discord link, add contact page by @anthonylavado in https://github.com/jellyfin/Swiftfin/pull/94
    • iOS player features by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/88
    • Filter device name by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/100
    • tvOS Video Player Changes by @stevebyatt10 in https://github.com/jellyfin/Swiftfin/pull/99
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/93
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/105
    • Search Enhancements by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/108
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/109
    • QOL - Set server keyboard for URL input by @LePips in https://github.com/jellyfin/Swiftfin/pull/114
    • QOL - Show server name in settings above logged in user by @LePips in https://github.com/jellyfin/Swiftfin/pull/115
    • update README.md by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/117
    • update Zh_Hans translation by @charleypeng in https://github.com/jellyfin/Swiftfin/pull/118
    • VideoPlayer's Orientation Issues by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/119
    • QOL - Set Theme by @LePips in https://github.com/jellyfin/Swiftfin/pull/113
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/120
    • Fix checkmark view by @LePips in https://github.com/jellyfin/Swiftfin/pull/122
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/121
    • SeriesItemView redesign by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/127
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/128
    • Fix for Swift 5.4 by @LePips in https://github.com/jellyfin/Swiftfin/pull/126
    • UX - TvOS Rearrange Media Buttons by @LePips in https://github.com/jellyfin/Swiftfin/pull/129
    • Merge Weblate Translations by @anthonylavado in https://github.com/jellyfin/Swiftfin/pull/130
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/131
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/133
    • Add ISSUE_TEMPLATE by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/135
    • Implement General Errors by @LePips in https://github.com/jellyfin/Swiftfin/pull/136
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/138
    • Add tvOS note by @anthonylavado in https://github.com/jellyfin/Swiftfin/pull/140
    • Fix crash when appearing some ItemView by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/143
    • Fix connect to server loading by @LePips in https://github.com/jellyfin/Swiftfin/pull/146
    • Add custom time skip durations by @LePips in https://github.com/jellyfin/Swiftfin/pull/149
    • Video Player - Positive Time Ticker by @LePips in https://github.com/jellyfin/Swiftfin/pull/152
    • Video Player - Fix Options View by @LePips in https://github.com/jellyfin/Swiftfin/pull/154
    • Settings - Advanced Server View by @LePips in https://github.com/jellyfin/Swiftfin/pull/153
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/141
    • Item View - Refactor by @LePips in https://github.com/jellyfin/Swiftfin/pull/165
    • Video Player - Next Up button constraints by @LePips in https://github.com/jellyfin/Swiftfin/pull/162
    • iOS 15 todos and force iOS 15 minimum by @LePips in https://github.com/jellyfin/Swiftfin/pull/169
    • tvOS fixes by @jhays in https://github.com/jellyfin/Swiftfin/pull/170
    • Apply Coordinator Pattern and Add Deep-Links by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/155
    • tvOS library work - add All Media tab by @jhays in https://github.com/jellyfin/Swiftfin/pull/172
    • Add Route function menu to ItemView by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/174
    • fix tvOS build error by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/180
    • use CollectionView on tvOS LibraryView by @jhays in https://github.com/jellyfin/Swiftfin/pull/182
    • Multi Server/User Support and More by @LePips in https://github.com/jellyfin/Swiftfin/pull/181
    • tvOS Movies and TV Shows tabs by @jhays in https://github.com/jellyfin/Swiftfin/pull/194
    • Debug/Dev App Icons by @LePips in https://github.com/jellyfin/Swiftfin/pull/192
    • Fix Discovery Port by @LePips in https://github.com/jellyfin/Swiftfin/pull/199
    • Default scheme by @LePips in https://github.com/jellyfin/Swiftfin/pull/198
    • iOS - Launch Screen by @LePips in https://github.com/jellyfin/Swiftfin/pull/197
    • iOS - Home Screen Pull To Refresh by @LePips in https://github.com/jellyfin/Swiftfin/pull/193
    • Swiftgen and Clean up Localizable.strings by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/187
    • Change to utilize image API by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/225
    • Fix layout issue of ItemView when landscape or iPad by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/222
    • Multi Server URL by @LePips in https://github.com/jellyfin/Swiftfin/pull/211
    • [ci] SwiftLint by @github-actions in https://github.com/jellyfin/Swiftfin/pull/247
    • iOS: hide home indicator on devices without a home button by @knbx in https://github.com/jellyfin/Swiftfin/pull/248
    • LiveTV support on tvOS by @jhays in https://github.com/jellyfin/Swiftfin/pull/233
    • Fix bug related to recursive folders. by @PangMo5 in https://github.com/jellyfin/Swiftfin/pull/254
    • Video Player Refactor and More by @LePips in https://github.com/jellyfin/Swiftfin/pull/250
    • Update tvOS disclaimer by @LePips in https://github.com/jellyfin/Swiftfin/pull/260
    • tvOS - More Cinematic Views and Fixes by @LePips in https://github.com/jellyfin/Swiftfin/pull/259
    • Collections support by @LePips in https://github.com/jellyfin/Swiftfin/pull/261
    • tvOS User Setting Focus by @LePips in https://github.com/jellyfin/Swiftfin/pull/265
    • Rename JellyfinPlayer to Swiftfin by @LePips in https://github.com/jellyfin/Swiftfin/pull/266
    • Missing link / wrong path for README.md JellyFin AppIcon by @jameskimmel in https://github.com/jellyfin/Swiftfin/pull/270
    • Some polishing by @LePips in https://github.com/jellyfin/Swiftfin/pull/267
    • Contribution Guidelines by @LePips in https://github.com/jellyfin/Swiftfin/pull/269
    • Refresh homeview automatically by @knbx in https://github.com/jellyfin/Swiftfin/pull/278
    • Build 68 small fixes by @LePips in https://github.com/jellyfin/Swiftfin/pull/273
    • Some cleanup by @LePips in https://github.com/jellyfin/Swiftfin/pull/274
    • tvOS Cinematic Home Screen View and Recently Added by @LePips in https://github.com/jellyfin/Swiftfin/pull/275
    • Subtitle size options by @knbx in https://github.com/jellyfin/Swiftfin/pull/276
    • SwiftFormat - third times the charm by @LePips in https://github.com/jellyfin/Swiftfin/pull/279
    • Fix SwiftFormat CI by @LePips in https://github.com/jellyfin/Swiftfin/pull/281
    • Localize all (most) current strings by @LePips in https://github.com/jellyfin/Swiftfin/pull/282
    • Refresh item on playback close by @LePips in https://github.com/jellyfin/Swiftfin/pull/283
    • Missing and Unaired Items by @LePips in https://github.com/jellyfin/Swiftfin/pull/284
    • Nuke Lazy Image Re-Implement by @LePips in https://github.com/jellyfin/Swiftfin/pull/292
    • Remove from Resume and Play from Beginning by @LePips in https://github.com/jellyfin/Swiftfin/pull/289
    • iOS - Multiple Media Sources by @LePips in https://github.com/jellyfin/Swiftfin/pull/291
    • Fix Transcoding by @LePips in https://github.com/jellyfin/Swiftfin/pull/294
    • Add M1 to Device Builder by @LePips in https://github.com/jellyfin/Swiftfin/pull/295
    • Fix M1 by @LePips in https://github.com/jellyfin/Swiftfin/pull/297
    • iOS - LibraryView Improvements and Tidbits by @LePips in https://github.com/jellyfin/Swiftfin/pull/298
    • Aiden's Build 69 Quick Fixes by @LePips in https://github.com/jellyfin/Swiftfin/pull/299
    • Quick Fixes Pt2 by @LePips in https://github.com/jellyfin/Swiftfin/pull/301
    • Fallback to English if No Translation by @LePips in https://github.com/jellyfin/Swiftfin/pull/304
    • Accessibility fixes by @dcordero in https://github.com/jellyfin/Swiftfin/pull/307
    • Support Redirects by @LePips in https://github.com/jellyfin/Swiftfin/pull/300
    • Allow force direct play as a temporary measure by @LePips in https://github.com/jellyfin/Swiftfin/pull/305
    • Chapters Support by @LePips in https://github.com/jellyfin/Swiftfin/pull/306
    • Fix Base URL handling by @andrein in https://github.com/jellyfin/Swiftfin/pull/309
    • Accessibility fixes by @dcordero in https://github.com/jellyfin/Swiftfin/pull/310
    • Thumb Image and ImageView Fallbacks by @LePips in https://github.com/jellyfin/Swiftfin/pull/311
    • Update to new bundle identifier by @anthonylavado in https://github.com/jellyfin/Swiftfin/pull/313
    • Update to latest build number by @anthonylavado in https://github.com/jellyfin/Swiftfin/pull/314

    New Contributors

    • @PangMo5 made their first contribution in https://github.com/jellyfin/Swiftfin/pull/21
    • @stevebyatt10 made their first contribution in https://github.com/jellyfin/Swiftfin/pull/83
    • @anthonylavado made their first contribution in https://github.com/jellyfin/Swiftfin/pull/94
    • @charleypeng made their first contribution in https://github.com/jellyfin/Swiftfin/pull/118
    • @jhays made their first contribution in https://github.com/jellyfin/Swiftfin/pull/170
    • @knbx made their first contribution in https://github.com/jellyfin/Swiftfin/pull/248
    • @jameskimmel made their first contribution in https://github.com/jellyfin/Swiftfin/pull/270
    • @dcordero made their first contribution in https://github.com/jellyfin/Swiftfin/pull/307
    • @andrein made their first contribution in https://github.com/jellyfin/Swiftfin/pull/309

    Full Changelog: https://github.com/jellyfin/Swiftfin/compare/v26...v70

    Source code(tar.gz)
    Source code(zip)
    Swiftfin.iOS.ipa(23.01 MB)
    Swiftfin.tvOS.ipa(18.16 MB)
  • v26(May 27, 2021)

  • v25(May 27, 2021)

  • v24(May 27, 2021)

  • v23(May 27, 2021)

  • v22(May 27, 2021)

  • v21(May 26, 2021)

  • v20(May 25, 2021)

  • v18(May 25, 2021)

  • v16(May 25, 2021)

  • v15(May 24, 2021)

  • v14(May 23, 2021)

  • v13(May 23, 2021)

  • v12(May 22, 2021)

  • v11(May 22, 2021)

  • v10(May 22, 2021)

Owner
Jellyfin
The Free Software Media System
Jellyfin
A completely native Discord client for macOS built 100% in Swift and SwiftUI

Swiftcord A completely native Discord client for macOS built 100% in Swift and SwiftUI This project aims to create a fully functional native Discord c

CryptoAlgo-Dev 1.1k Jan 9, 2023
Swift iPhone and iPad Client for Polls API, using Hyperdrive API client

Polls Client This is a Swift iPhone and iPad client for the Polls API - a simple application allowing users to view polls and vote in them. Polls is a

Apiary 34 Jul 15, 2022
A weather app developed in React Native. It is the React Native version of SwiftWeather.

ReactNativeWeather A weather app developed in React Native. It is the React Native version of SwiftWeather How to run the app Install react-native If

Jake Lin 22 Jun 7, 2022
This app is a native client for openHAB which allows easy access to your sitemaps

openHAB client for iOS Introduction This app is a native client for openHAB which allows easy access to your sitemaps. Beta releases are available on

openHAB 176 Dec 30, 2022
Control Room : a macOS app that lets you control the simulators for iOS, tvOS, and watchOS

Control Room is a macOS app that lets you control the simulators for iOS, tvOS, and watchOS – their UI appearance, status bar configuration, and more.

null 0 Nov 30, 2021
SearchField for iOS, macOS and tvOS

SearchField for iOS, macOS and tvOS SearchField is created and maintaned with ❥ by Sascha Muellner. What? This is a SwiftUI package with support for i

Swift Package Repository 1 Jan 9, 2022
CZWeatherKit is a simple, extensible weather library for iOS, tvOS, and OS X that allows for easy fetching of weather data from various weather services.

CZWeatherKit is a simple, extensible weather library for iOS, tvOS, and OS X that allows for easy fetching of weather data from various weather services.

Comyar 455 Nov 20, 2022
Native and encrypted password manager for iOS and macOS.

Open Sesame Native and encrypted password manager for iOS and macOS. What is it? OpenSesame is a free and powerful password manager that lets you mana

OpenSesame 431 Dec 28, 2022
Watch WWDC and Tech Talk Videos on your Apple TV, tvOS App.

WWDCTV This project allows you to watch WWDC & Tech Talks videos on your Apple TV. It has been built for tvOS 9.0 using Xcode 7.1 You can also favouri

Aaron Stephenson 421 Nov 3, 2022
A SwiftUI dynamic property wrapper for fetching media from your photo library. (iOS, tvOS, macOS)

Media Also available as a part of my SwiftUI+ Collection – just add it to Xcode 13+ A package for simplifying the user of the camera and the user's ph

SwiftUI+ 20 Nov 16, 2022
A SwiftUI app that reads iOS/watchOS/tvOS device model information from Xcode you select.

iVariant A SwiftUI app that reads iOS/watchOS/tvOS device model information from Xcode you select. Preview License iVariant is licensed under MIT. Cop

Lakr Aream 20 Aug 4, 2022
Adventures-with-Swift - Building Native iOS Apps with UIKit and SiwftUI 

Adventures with Swift, UIKit, & SwiftUI As I have experience working with React Native and have dabbled a bit with Flutter, I've decided to dive in th

Daniel Stafford 4 Nov 17, 2022
📱 Guideo - Native iOS App crafted with Swift and SwiftUI

Guideo An awesome iOS Native App ?? About Guideo App wire-framed and crafted from scratch by a team of 4. Our final project of the  Apple Foundation

Lyane Lamara 5 Oct 12, 2022
Tutorial GraphQL + Node Express + MySQL, and sample for Android / iOS client

GraphQL-tutorial Tutorial for GraphQL + Node Express + MySQL, and sample for Android / iOS client Blog NeoRoman's GraphQL-tutorial (Korean) Materials

Henry Kim 4 Oct 20, 2022
Client library for making in-app purchases on iOS and macOS Automattic apps

MobilePayKit Client library for making in-app purchases on iOS and macOS Automattic apps Introduction MobilePayKit is a client library for making in-a

Automattic 8 Oct 20, 2022
Mastodon and Twitter client for iOS, iPadOS & macOS

Note: Mamoot! is under heavy development and is obviously far from complete at this moment. We're currently looking for more people to work with us, s

null 13 Nov 22, 2022
iOS Trakt Client - Keep track of your favorite TV shows and movies on your iPhone. (Under development)

CouchTracker Keep track of your favorite movies and tv shows on your iPhone Setup for development You will need Xcode 11.2.1 Swift 5.1.2 Run the follo

Pietro Caselani 42 Apr 19, 2022
Demonstration of using UIWindowScene and SwiftUI to provide a native-looking Mac preferences window in Catalyst

CatalystPrefsWindow Ever wondered how to create a more Mac-like preferences window for Catalyst? Perhaps Settings Bundles are too limiting for the kin

Steven Troughton-Smith 148 Dec 27, 2022
Provenance is a native macOS application that interacts with the Up Banking Developer API to display information about your bank accounts, transactions, categories, tags and more.

Provenance Provenance is a native macOS application that interacts with the Up Banking Developer API to display information about your bank accounts,

Paul Tavitian 8 Dec 8, 2022