Spotify Premium을 무료로 즐길 수있는 최고의 스팟 리피 앱을 발견하십시오. 2024 년 iOS 18, iOS 17, iOS 16 및 iOS 15 용 Spotify ++를 다운로드하여 탈옥이 필요하지 않습니다. 이러한 버전의 Spotify ++는 모든 iPhone 및 iPad와 호환됩니다.
iOS 용 Spotify ++는 iPhone, iPad 및 iPod Pro 장치 용으로 설계된 Spotify의 수정 된 버전입니다. 다음은 시간을 절약하기 위해 최고의 Spotify 조정 앱의 최신 업데이트 목록입니다.
Spotify Teaks 이름 | 설명 |
---|---|
EeveeSpotify | 이 조정은 Spotify가 Spotilife와 같은 무료 청취를 부여하는 프리미엄 구독을 가지고 있다고 생각합니다. 또한 커스텀 가사와 같은 추가 기능도 제공합니다. |
Spotify++ | iOS 용 Spotify ++는 iPad 및 iPhone과 같은 Apple 장치 용으로 맞춤화 된 대중 음악 스트리밍 앱의 수정 된 버전입니다. 타사 제작자가 개발 한이 조정 된 앱은 구독없이 Spotify 프리미엄 기능을 잠금 해제하여 광고없는 경험과 주문형 노래 재생을 부여합니다. |
Spotube | Spotube는 Spotify API 지원이있는 iOS의 음악 연주자입니다. Spotify의 대안으로, 사용자에게 Spotify 재생 목록 및 라이브러리 내에서 전체 음악 컬렉션에 대한 무제한 액세스 권한을 부여합니다. Spotify의 강력한 데이터 API를 활용하는 Spotube는 YouTube, Piped.video 또는 Jiosaavn과 같은 플랫폼과 완벽하게 통합되며 무료 광고 무료 음악 스트리밍을 제공합니다. |
Spotilife | Spotilife는 광고를 제거하고 제한된 건너 뛰기를 제거하며 거의 모든 프리미엄 기능을 잠금 해제하는 Spotify iOS 앱 조정입니다. |
버전 Spotify ++부터 시작하여 앱은 Spotify 요청을 사용자 데이터로드하여이를 실시화하며 매개 변수를 실시간으로 수정합니다. 이 방법은 매우 안정적이고 효과적이므로 사용자는 Spotify ++ 설정에서 동적 프리미엄 패치 방법을 선택할 수 있습니다.
로그인하면 Spotify는 사용자 데이터를 가져와 /Library/Application Support/PersistentCache
디렉토리에있는 offline.bnk
파일에 캐시합니다. 각 가치 이전의 길이 바이트 및 기타 규칙을 포함하여 독점적 인 이진 형식으로 데이터를 저장합니다. player-license
, financial-product
, streaming-rules
및 기타 키는 사용자의 기능을 결정합니다.
조정은 초기화 중에이 파일을 패치합니다. Spotify는 사용자가 프리미엄 액세스 권한이 있다고 가정하면로드합니다. 그러나 동적 길이와 다양한 바이트의 도전으로 인해 실제 패치가 발생하지 않을 수 있습니다. 조정은 현재 offline.bnk
에서 사용자 이름을 추출하여 모든 사전 설정 프리미엄 값을 포함하는 파일 인 premiumblank.bnk
offline.bnk
교체합니다. Spotify가 사용자 데이터를 다시로드하는 경우 사용자를 프리 플랜으로 전환하여 앱을 신속하게 다시 시작하고 데이터를 재설정 할 수있는 옵션이있는 팝업을 트리거 할 수 있습니다.
또한 Tweak는 SPTFreeTierArtistHubRemoteURLResolver
에서 trackRowsEnabled
true
로 설정하여 Spotify가 아티스트 페이지에서 이름을 추적하지 않고로드 할 수 있도록합니다. 이 기능은 Spotilife와 유사하게 중단 될 수 있지만 최신 Spotify 8.9 ## 버전에서는 여전히 효과적입니다. (Spotilife는 또한 offline.bnk
수정하지만 최신 버전에는 영향을 미치지 않는 모호한 바이트를 변경합니다).
사이드로드 된 앱에서 Spotify 링크를 열려면 설정> Safari> 확장에서 활성화 및 액세스 권한을 확인하십시오.
iOS 장치 용으로 강화 된 Spotify 버전 인 Spotify ++를 발견하십시오. 구독, 광고없는 음악 및 비디오 스트리밍, HD 재생 등없이 프리미엄 기능을 즐기십시오. 탈옥없이 iPhone 또는 iPad에서 Spotify ++를 쉽게 다운로드하여 설치하십시오. 최신 iOS 버전으로 업데이트하고 다른 사람보다 독점 콘텐츠에 액세스하십시오.
특징 | 설명 |
---|---|
무료로 프리미엄 기능 | Ade-Free 청취를 포함하여 구독없이 Spotify 프리미엄 기능에 액세스하십시오. |
광고없는 경험 | 음악 및 비디오 스트리밍 세션 중에 광고가없는 중단을 제거하십시오. |
HD 재생 | 전체 HD 모드에서 수정 오디오 및 비디오 품질을 즐기십시오. |
무제한 건너 뛰기 | 제한없이 트랙을 건너 뛰면 음악 재생 목록을 완전히 제어 할 수 있습니다. |
음악 수입 | 장치 스토리지에서 트랙을 쉽게 가져 와서 Spotify ++로 음악 라이브러리를 확장하십시오. |
무료 다운로드 | Spotify ++를 무료로 다운로드하고 비용없이 음악 경험을 향상시킵니다. |
탈옥이 필요하지 않습니다 | 탈옥 필요없이 iOS 장치에 Spotify ++를 안전하게 설치하십시오. |
iOS 호환성 | iOS 15 및 iOS 16과 호환되어 최신 Apple 장치에서 최적의 성능을 보장합니다. |
강제 셔플이 없습니다 | Spotify ++의 강제 셔플 기능이없는 순서대로 음악을 듣습니다. |
즐겨 찾기를 다운로드하십시오 | 앱 내에서 다운로드하여 오프라인 청취를 위해 좋아하는 트랙을 저장하십시오. |
먼저, 오디오 재생을위한 fileURL
과 같은 더 많은 속성을 포함시키고 현재 연주 상태를 추적하기위한 isPlaying
과 같은 더 많은 속성을 포함하도록 Song
모델을 개선합시다.
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
}
다음으로 AVPlayer
사용하여보다 고급 오디오 재생 기능을 지원하기 위해 AudioPlayer
클래스를 업데이트하겠습니다.
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 ) )
}
}
이제 재생 컨트롤 (Play/Pause, Seek Bar)을 포함하도록 Swiftui보기를 향상시켜 봅시다.
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, iPhone X.
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, iOS 17.3.1, iOS 17.3, iOS 17.2.1, iOS 17.2, iOS 17.1.2, iOS 17.1.1, iOS 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.1, iOS 16.7, iOS 16.6.1, iOS 16.6, iOS 16.5.1, iOS 16.5, iOS 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.2, 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.8, iOS 15.7.7, iOS 15.7.6, iOS 15.7.5, iOS 15.7.4, iOS 15.7 .3, iOS 15.7.2, iOS 15.7.1, iOS 15.7, iOS 15.6.1, iOS 15.6, iOS 15.5, iOS 15.4.1, iOS 15.4, iOS 15.3.1, iOS 15.3, iOS 15.2.1, iOS 15.2 , 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.6, iOS 14.5.1, iOS 14.5, iOS 14.4.2, iOS 14.4.1, iOS 14.4, iOS 14.3, 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, iOS 13.4.1, iOS 13.4, iOS 13.3.1, iOS 13.3, iOS 13.2.3, iOS 13.2.2, iOS 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.1, iOS 12.5, 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.3.2, 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.
이 프로젝트는 오픈 소스이며 MIT 라이센스에 의해 관리됩니다. 라이센스 계약에 요약 된 조건에 따라 활용, 수정 및 배포 할 수 있습니다.
우리는 헌신과 노력으로 Spotify ++ 프로젝트를 가능하게하는 개인과 팀에게 진심으로 감사를 전합니다. 그들의 기여는 귀중했습니다.