找到最好的调整Spotify应用程序,免费享受Spotify Premium。在2024年下载iOS 18,iOS 17,iOS 16和iOS 15的Spotify ++,无需越狱。这些版本的Spotify ++与所有iPhone和iPad兼容。
iOS的Spotify ++是为iPhone,iPad和iPod Pro设备设计的Spotify的修改版本。这是最新的最新列表的最佳Spotify调整应用程序,以节省您的时间。
Spotify调整名称 | 描述 |
---|---|
EeveeSpotify | 这项调整使Spotify认为您有高级订阅,可以像Spotilife一样免费聆听。它还提供了其他功能,例如自定义歌词。 |
Spotify++ | iOS的Spotify ++是针对iPad和iPhone等苹果设备量身定制的流行音乐流媒体应用的修改版本。由第三方创作者开发的这款调整应用程序在没有订阅的情况下解锁Spotify Premium功能,授予您无广告的体验和点播歌曲播放。 |
Spotube | Sponsube是iOS的音乐播放器,并获得Spotify API支持。它是Spotify的替代方法,允许用户在Spotify播放列表和库中无限制地访问其整个音乐集合。利用Spotify的强大数据API,Spotsube与YouTube,Piped.video或Jiosaavn等平台无缝集成,提供免费的,无广告的音乐流。 |
Spotilife | Spotilife是Spotify iOS应用程序调整,可删除广告,删除有限的跳过并几乎解锁其他所有优质功能。 |
从版本Spotify ++开始,该应用拦截了Spotify请求,以加载用户数据,对其进行测试并实时修改参数。此方法高度稳定且有效,使用户可以在Spotify ++设置中选择动态的高级修补方法。
登录后,Spotify获取用户数据并将其缓存在offline.bnk
文件中,位于/Library/Application Support/PersistentCache
目录中。它以专有二进制格式存储数据,包括每个值之前的长度字节和其他约定。诸如player-license
, financial-product
, streaming-rules
等的钥匙决定了用户的功能。
调整在初始化期间对此文件进行补丁;然后,假设用户具有优质访问权限,则将Spotify加载。但是,由于具有动态长度和各种字节的挑战,可能不会发生实际修补。该调整从当前offline.bnk
文件中提取用户名,并将其插入premiumblank.bnk
,一个包含所有预设溢价值的文件,替换offline.bnk
。如果Spotify重新加载用户数据,则可以将用户切换到免费计划,从而触发带有选项快速重新启动应用程序并重置数据的选项。
此外,该调整将SPTFreeTierArtistHubRemoteURLResolver
中的trackRowsEnabled
设置为true
,从而使Spotify不仅可以在艺术家页面上加载名称。尽管此功能可以停止,但类似于Spotilife,但在最新的Spotify 8.9 ##版本中仍然有效。 (Spotilife还修改了offline.bnk
,但变化晦涩的字节对新版本没有影响)。
要在Sideloaded应用中打开Spotify链接,请确保在设置> Safari>扩展程序中激活和访问权限。
发现Spotify ++,这是针对iOS设备量身定制的Spotify的增强版。享受无订阅,无广告音乐和视频流,高清播放等优质功能。在iPhone或iPad上轻松下载并安装Spotify ++,而无需越狱。在其他任何人面前访问最新的iOS版本和访问独家内容。
特征 | 描述 |
---|---|
免费的优质功能 | 访问Spotify Premium功能,无需订阅,包括无广告收听。 |
无广告体验 | 在音乐和视频流媒体会话期间消除没有广告的中断。 |
高清播放 | 在完整的高清模式下享受清晰的音频和视频质量。 |
无限的跳过 | 跳过没有限制的轨道,使您可以完全控制音乐播放列表。 |
导入音乐 | 轻松从设备的存储中导入轨道到Spotify ++,从而扩展您的音乐库。 |
免费下载 | 免费下载Spotify ++,并无需任何费用即可增强您的音乐体验。 |
无需越狱 | 无需越狱就可以在iOS设备上安全地安装Spotify ++。 |
iOS兼容性 | 与iOS 15和iOS 16兼容,可确保最新的Apple设备上的最佳性能。 |
没有强迫洗牌 | 按照您喜欢的顺序收听您的音乐,没有Spotify ++中的强迫shuffle功能。 |
下载收藏夹 | 通过在应用程序中下载来保存喜爱的曲目,以供离线聆听。 |
首先,让我们改进Song
模型,包括更多属性,例如fileURL
播放音频和用于跟踪当前播放状态的isPlaying
:
struct Song {
let id : Int
let title : String
let artist : String
let album : String
let duration : Int // in seconds
let artwork : String // image name or URL
let fileURL : URL // URL to audio file
var isPlaying : Bool = false
}
接下来,让我们更新我们的AudioPlayer
类,以使用AVPlayer
支持更高级的音频播放功能:
import AVFoundation
class AudioPlayer {
static let shared = AudioPlayer ( )
private var player : AVPlayer ?
private var currentSong : Song ?
func play ( song : Song ) {
if currentSong ? . id == song . id {
// If the same song is already playing, toggle play/pause
if player ? . rate == 0 {
player ? . play ( )
} else {
player ? . pause ( )
}
} else {
// Play a new song
currentSong = song
player = AVPlayer ( url : song . fileURL )
player ? . play ( )
// Update the isPlaying state of the song
song . isPlaying = true
}
}
func pause ( ) {
player ? . pause ( )
if let song = currentSong {
song . isPlaying = false
}
}
func stop ( ) {
player ? . pause ( )
player = nil
if let song = currentSong {
song . isPlaying = false
}
}
func seek ( to time : TimeInterval ) {
player ? . seek ( to : CMTime ( seconds : time , preferredTimescale : 1 ) )
}
}
现在,让我们增强我们的Swiftui观点,以包括播放控件(Play/Pause,Seek Bar):
import SwiftUI
import AVFoundation
struct ContentView : View {
@ State private var songs : [ Song ] = [
Song ( id : 1 , title : " Song 1 " , artist : " Artist A " , album : " Album X " , duration : 180 , artwork : " song1 " , fileURL : Bundle . main . url ( forResource : " song1 " , withExtension : " mp3 " ) ! ) ,
Song ( id : 2 , title : " Song 2 " , artist : " Artist B " , album : " Album Y " , duration : 200 , artwork : " song2 " , fileURL : Bundle . main . url ( forResource : " song2 " , withExtension : " mp3 " ) ! )
// Add more songs as needed
]
@ State private var isPlaying = false
@ State private var currentSong : Song ?
@ State private var currentTime : TimeInterval = 0
@ State private var duration : TimeInterval = 0
var body : some View {
NavigationView {
VStack {
if let song = currentSong {
VStack {
Image ( song . artwork )
. resizable ( )
. aspectRatio ( contentMode : . fit )
. frame ( width : 200 , height : 200 )
Text ( song . title )
. font ( . title )
. padding ( . top , 8 )
Text ( song . artist )
. font ( . headline )
. foregroundColor ( . gray )
. padding ( . bottom , 8 )
Text ( timeToString ( time : currentTime ) + " / " + timeToString ( time : duration ) )
. font ( . caption )
. foregroundColor ( . gray )
. padding ( . bottom , 16 )
HStack {
Button ( action : {
self . previous ( )
} ) {
Image ( systemName : " backward.fill " )
. font ( . title )
. foregroundColor ( . blue )
}
. padding ( . trailing , 40 )
Button ( action : {
self . playPause ( )
} ) {
Image ( systemName : isPlaying ? " pause.circle.fill " : " play.circle.fill " )
. font ( . system ( size : 80 ) )
. foregroundColor ( . blue )
}
Button ( action : {
self . next ( )
} ) {
Image ( systemName : " forward.fill " )
. font ( . title )
. foregroundColor ( . blue )
}
. padding ( . leading , 40 )
}
. padding ( . top , 32 )
Slider ( value : Binding (
get : { self . currentTime } ,
set : { newValue in
self . seek ( to : newValue )
}
) , in : 0 ... duration )
. padding ( . horizontal )
}
. onAppear {
self . play ( song : song )
}
} else {
Text ( " Select a song to play " )
. font ( . title )
. foregroundColor ( . gray )
}
List ( songs , id : . id ) { song in
SongRow ( song : song , isSelected : song . id == self . currentSong ? . id )
. onTapGesture {
self . currentSong = song
}
}
. navigationBarTitle ( " Music Player " )
}
}
. onReceive ( Timer . publish ( every : 1 , on : . main , in : . common ) . autoconnect ( ) ) { _ in
if self . isPlaying , let player = AudioPlayer . shared . player {
self . currentTime = player . currentTime ( ) . seconds
self . duration = player . currentItem ? . duration . seconds ?? 0
}
}
}
private func play ( song : Song ) {
AudioPlayer . shared . play ( song : song )
isPlaying = true
}
private func playPause ( ) {
if let song = currentSong {
if isPlaying {
AudioPlayer . shared . pause ( )
} else {
play ( song : song )
}
isPlaying . toggle ( )
}
}
private func seek ( to time : TimeInterval ) {
AudioPlayer . shared . seek ( to : time )
}
private func next ( ) {
guard let currentIndex = songs . firstIndex ( where : { $0 . id == currentSong ? . id } ) , currentIndex < songs . count - 1 else {
return
}
currentSong = songs [ currentIndex + 1 ]
}
private func previous ( ) {
guard let currentIndex = songs . firstIndex ( where : { $0 . id == currentSong ? . id } ) , currentIndex > 0 else {
return
}
currentSong = songs [ currentIndex - 1 ]
}
private func timeToString ( time : TimeInterval ) -> String {
let minutes = Int ( time ) / 60
let seconds = Int ( time ) % 60
return String ( format : " %02d:%02d " , minutes , seconds )
}
}
struct SongRow : View {
let song : Song
let isSelected : Bool
var body : some View {
HStack {
Image ( song . artwork )
. resizable ( )
. aspectRatio ( contentMode : . fit )
. frame ( width : 50 , height : 50 )
VStack ( alignment : . leading ) {
Text ( song . title )
. font ( . headline )
Text ( song . artist )
. font ( . subheadline )
}
Spacer ( )
if isSelected {
Image ( systemName : " speaker.fill " )
. foregroundColor ( . blue )
. padding ( . trailing , 20 )
}
}
. padding ( 8 )
}
}
iPhone 16(即将到来的),iPhone 15 Pro Max,iPhone 15 Pro,iPhone 15 Plus,iPhone 15,iPhone 14 Pro Max,iPhone 14 Pro,iPhone 14 Plus,iPhone 14。
iPhone 13 Pro Max,iPhone 13 Pro,iPhone 13 Mini,iPhone 13,iPhone 12 Pro Max,iPhone 12 Pro,iPhone 12 Mini,iPhone 12,iPhone 11 Pro Max,iPhone 11 Pro,iPhone 11,iPhone XS Max,iPhone XS ,iPhone XR,iPhoneX。
Spotify for iOS 18:
Spotify for iOS 17:
iOS 17.6,iOS 17.5.1,iOS 17.5,iOS 17.4.1,iOS 17.4.1,iOS 17.4,iOS 17.3.1,iOS 17.3,iOS 17.3,iOS 17.2.1,iOS 17.2,iOS 17.2,ios 17.1.2,ios 17.1.2,ios 17.1.1,17.1.1,17.1.1,17.1.1, iOS 17.1,iOS 17.0.3,iOS 17.0.2,iOS 17.0.1,iOS 17。
Spotify for iOS 16:
iOS 16.7.5,iOS 16.7.4,iOS 16.7.3,iOS 16.7.2,iOS 16.7.2,iOS 16.7.1,iOS 16.7,iOS 16.7,iOS 16.6.1,iOS 16.6,ios 16.6,ios 16.5.1,iOS 16.5.1,ios 16.5,ios 16.5,ios 16.5,ios 16.5,ios 16.5,ios 16.5,ios 16.5, 16.4.1,iOS 16.4,iOS 16.3.1,iOS 16.3,iOS 16.2,iOS 16.1.2,iOS 16.1.1,iOS 16.1,iOS 16.0.3,ios 16.0.3,ios 16.0.2,ios 16.0.2,ios 16.0.1,ios 16.0.1,ios 16。
Spotify for iOS 15:
iOS 15.8.2,iOS 15.8.1,iOS 15.8,iOS 15.7.9,iOS 15.7.9,iOS 15.7.8,iOS 15.7.7,iOS 15.7.7,iOS 15.7.6,ios 15.7.7.5,iOS 15.7.5,ios 15.7.4,iOS 15.7.4,iOS 15.7.4,ios 15.7.7 。 ,iOS 15.1.1,iOS 15.1,iOS 15.0.2,iOS 15.0.1,iOS 15。
Spotify for iOS 14:
iOS 14.8.1,iOS 14.8,iOS 14.7.1,iOS 14.7,iOS 14.7,iOS 14.6,iOS 14.5.1,iOS 14.5,iOS 14.5,ios 14.4.2,ios 14.4.1,ios 14.4.1,ios 14.4,ios 14.4,ios 14.3,ios 14.3,ios 14.2,ios 14.2,ios 14.2,iOS 14.2 .1,iOS 14.2,iOS 14.1,iOS 14.0.1,iOS 14。
Spotify for iOS 13:
iOS 13.7,iOS 13.6.1,iOS 13.6,iOS 13.5.1,iOS 13.5.1,iOS 13.5,iOS 13.4.1,iOS 13.4,iOS 13.4,iOS 13.3.1,iOS 13.3,ios 13.3,iOS 13.2.3,iOS 13.2.3,ios 13.2.2,13.2.2, iOS 13.2,iOS 13.1.3,iOS 13.1.2,iOS 13.1.1,iOS 13.1,iOS 13。
Spotify for iOS 12:
iOS 12.5.7,iOS 12.5.6,iOS 12.5.5,iOS 12.5.4,iOS 12.5.3,iOS 12.5.2,iOS 12.5.2,iOS 12.5.1,iOS 12.5,ios 12.4.9,ios 12.4.9,ios 12.4, .8,iOS 12.4.7,iOS 12.4.6,iOS 12.4.5,iOS 12.4.4,iOS 12.4.3,iOS 12.4.2,iOS 12.4.1,iOS 12.4,iOS 12.4,iOS 12.3.2,ios 12.3.1,iOS 12.3.1 ,iOS 12.3,iOS 12.2,iOS 12.1.4,iOS 12.1.3,iOS 12.1.2,iOS 12.1.1,iOS 12.1,iOS 12.0.1,iOS 12.0.1,iOS 12。
该项目是开源的,并由麻省理工学院许可证管辖。欢迎您在许可协议中概述的条件下利用,修改和分配。
我们向个人和团队的奉献精神和努力使Spotify ++项目成为可能。他们的贡献非常宝贵: