I'm attempting to simply pass the video link inside the json to the navigation menu... my brain is fried as I'm lost in why I can't do this view the navigation link protocol.
import SwiftUI
import AVKit
struct MainDetail: View {
var json: Main
private let player = AVPlayer(url: URL(string: item.interactive))
var body: some View {
VideoPlayer(player: player)
.onAppear() {
// Start the player going, otherwise controls don't appear
player.play()
}
.onDisappear() {
// Stop the player when the view disappears
player.pause()
}
}
}
this returns a "Cannot find 'item' in scope" despite being declared back on the main content view. the intended action is loading the "interactive" link (m3u8 file) in a player view when clicked on. I apologize for not understanding what's going on here.
Post
Replies
Boosts
Views
Activity
I've been watching various tutorials and have managed to come up with the following code:
import SwiftUI
import AVKit
struct ContentView: View {
@State private var wolData = [Main]()
var body: some View {
NavigationView{List(wolData, id: \.id) { item in
NavigationLink(destination: MainDetail(json: item)) {
HStack() {
Text(item.name)
.font(.headline)
Text(item.date)
.font(.footnote)
if #available(iOS 15.0, *) {
AsyncImage(url: URL(string: item.thumbnail))
{ image in
image
.resizable()
.scaledToFill()
} placeholder: {
Color.purple.opacity(0.1)
}
.frame(width: 20, height: 20)
} else {
// Fallback on earlier versions
}
}
}
}.onAppear(perform: loadData)}
}
}
extension ContentView
{
func loadData() {
guard let url = URL(string: "https://wolvideos.firebaseapp.com/Simple.json") else {
return
}
let request = URLRequest(url: url)
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let response_obj = try? JSONDecoder().decode([Main].self, from: data) {
DispatchQueue.main.async {
self.wolData = response_obj
}
}
}
}.resume()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import Foundation
struct Main: Decodable {
var id: Int
var name: String
var interactive: String
var thumbnail: String
var date: String
var videolink: String
var sharelink: String
}
import SwiftUI
import AVKit
struct MainDetail: View {
var json: Main
private let player = AVPlayer(url: URL(string: "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8")!)
var body: some View {
VideoPlayer(player: player)
.onAppear() {
// Start the player going, otherwise controls don't appear
player.play()
}
.onDisappear() {
// Stop the player when the view disappears
player.pause()
}
}
}
Now that I've shared that, the intent is to when the user clicks an option load the corresponding video (from the json not the current test file) via HLS in a default player (like the one in safari)... should I be going about this in a different way? I'm starting to think committing to SwiftUI is a mistake.
This video session is essentially a consumer facing video, there isn't even a single line of code shown.
VideoPlayer(player: player)
doesn't give the shown "new features" by default, an example / implementation should be expected of a WWDC session.
I've followed several tutorials and nothing works or is remotely simple. can anyone perhaps link a json tutorial that can load the following in a "SWIFT UI" format?
{
"id": 182,
"name": "message 2048",
"interactive": "https://wolvideos.firebaseapp.com/Test1.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 1",
"videolink": "https://player.vimeo.com/external/656370948.m3u8?s=e50ca2b440798886646ba88a07e9c46a90c9df11",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
},
{
"id": 180,
"name": "Title 4",
"interactive": "https://wolvideos.firebaseapp.com/Test2.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 2",
"videolink": "https://player.vimeo.com/external/653500077.m3u8?s=96c687bef62bfd01ea195e4113e197ebd8d09143",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
},
{
"id": 172,
"name": "Titil 20203",
"interactive": "https://wolvideos.firebaseapp.com/Test1.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 1",
"videolink": "https://player.vimeo.com/external/656370948.m3u8?s=e50ca2b440798886646ba88a07e9c46a90c9df11",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
},
{
"id": 171,
"name": "Title 20part2",
"interactive": "https://wolvideos.firebaseapp.com/Test2.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 2",
"videolink": "https://player.vimeo.com/external/653500077.m3u8?s=96c687bef62bfd01ea195e4113e197ebd8d09143",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
},
{
"id": 170,
"name": "Title 2021",
"interactive": "https://wolvideos.firebaseapp.com/Test1.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 1",
"videolink": "https://player.vimeo.com/external/656370948.m3u8?s=e50ca2b440798886646ba88a07e9c46a90c9df11",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
},
{
"id": 169,
"name": "Title 2020",
"interactive": "https://wolvideos.firebaseapp.com/Test2.mp4",
"thumbnail": "https://wolvideos.firebaseapp.com/back.jpg",
"date": "April 2",
"videolink": "https://player.vimeo.com/external/653500077.m3u8?s=96c687bef62bfd01ea195e4113e197ebd8d09143",
"sharelink": "https://youtu.be/n7YjxFCyDNQ"
}
]
https://wolvideos.firebaseapp.com/Simple.json
it's infuriating that it sometimes only takes 2 minuets and then takes hours on other devices. knowing how long it's going to take would actually give us information to make adjustments.
I'm. asking this one to see how many other developers would also like this feature, and to see if anyone knows of an add-on or such.
I'm using this documentation as my base https://developer.apple.com/tutorials/swiftui/building-lists-and-navigation
I'm failing to understand how I would simply adapt the app to load the json remotely
import Foundation
var landmarks: [Landmark] = load("landmarkData.json")
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
else {
fatalError("Couldn't find \(filename) in main bundle.")
}
do {
data = try Data(contentsOf: file)
} catch {
fatalError("Couldn't load \(filename) from main
snippet from Model data.swift
the only example I've found is included below, however it's using an entirely different setup and does not use a detail view.
import SwiftUI
import Combine
struct ContentView: View {
@ObservedObject var fetcher = MovieFetcher()
var body: some View {
VStack {
List(fetcher.movies) { movie in
VStack (alignment: .leading) {
Text(movie.name)
Image(movie.thumbnail)
Text(movie.released)
.font(.system(size: 11))
.foregroundColor(Color.gray)
}
}
}
}
}
public class MovieFetcher: ObservableObject {
@Published var movies = [Movie]()
init(){
load()
}
func load() {
let url = URL(string: "https://wolvideos.web.app/videos.js")!
URLSession.shared.dataTask(with: url) {(data,response,error) in
do {
if let d = data {
let decodedLists = try JSONDecoder().decode([Movie].self, from: d)
DispatchQueue.main.async {
self.movies = decodedLists
}
}else {
print("No Data")
}
} catch {
print ("Error")
}
}.resume()
}
}
struct Movie: Codable, Identifiable {
public var id: Int
public var name: String
public var thumbnail: String
public var released: String
enum CodingKeys: String, CodingKey {
case id = "id"
case name = "name"
case thumbnail = "thumbnail"
case released = "description"
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
If possible can someone explain how and the best way to load a json file and then let the app format it into detail views?
I'm sick of Xcode failing to build on my registered device! What the heck is Xcode's problem now?
Unable to install ""
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402620388
-
No code signature found.
Domain: com.apple.dt.MobileDeviceErrorDomain
Code: -402620388
User Info: {
DVTRadarComponentKey = 261622;
MobileDeviceErrorCode = "(0xE800801C)";
"com.apple.dtdevicekit.stacktrace" = (
0 DTDeviceKitBase 0x00000001259a193f DTDKCreateNSErrorFromAMDErrorCode + 220
1 DTDeviceKitBase 0x00000001259e0124 __90-[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:]_block_invoke + 155
2 DVTFoundation 0x0000000108bbcb43 DVTInvokeWithStrongOwnership + 71
3 DTDeviceKitBase 0x00000001259dfe65 -[DTDKMobileDeviceToken installApplicationBundleAtPath:withOptions:andError:withCallback:] + 1440
4 IDEiOSSupportCore 0x0000000125850d28 __118-[DVTiOSDevice(DVTiPhoneApplicationInstallation) processAppInstallSet:appUninstallSet:installOptions:completionBlock:]_block_invoke.292 + 3513
5 DVTFoundation 0x0000000108ceb2aa DVT_CALLING_CLIENT_BLOCK + 7
6 DVTFoundation 0x0000000108cececc __DVTDispatchAsync_block_invoke + 1191
7 libdispatch.dylib 0x00007fff201cd52d _dispatch_call_block_and_release + 12
8 libdispatch.dylib 0x00007fff201ce717 _dispatch_client_callout + 8
9 libdispatch.dylib 0x00007fff201d454e _dispatch_lane_serial_drain + 606
10 libdispatch.dylib 0x00007fff201d501b _dispatch_lane_invoke + 375
11 libdispatch.dylib 0x00007fff201deb9b _dispatch_workloop_worker_thread + 819
12 libsystem_pthread.dylib 0x00007fff2034d4f2 _pthread_wqthread + 314
13 libsystem_pthread.dylib 0x00007fff2034c4c3 start_wqthread + 15
);
}
-
System Information
macOS Version 11.0 (Build 20A5374g)
Xcode 12.0.1 (17220)
I'm using sidecar as a second display and have "displays as separate windows off" and restarted! Why does apple insist on clipping the windows too locations I did not specify even using Option key still clips the window to one window not spanning both windows! when using a PC this is very simple on MacOS it seems Apple has made it a pain to do something so simple!
im having so much trouble trying to figure pout how I can get a SwiftUI button to link to a different SwiftUI file / view that is giving me so much trouble.
First View - https://developer.apple.com/forums/content/attachment/1edea652-6345-4032-8bf1-04b41825c4db
Second View - https://developer.apple.com/forums/content/attachment/85511659-3631-4fdc-b30f-6f0e94e81a2e
'
Attempted solution - https://developer.apple.com/forums/content/attachment/1d83eb4b-6fbe-481b-ad94-e36ad283760f
This is the Code I was attempting to bridge them with but I keep ending up with many different errors. So what am I not getting... there has to be a way to do this if not then what's the point of using SwiftUI?
How can I get SwiftUI to load 8 images horizontally but if the third image happens to go off screen it puts it in a Vstack underneath the 1st image with the same padding... and if three can fit on the screen it does the same to the 6th.
I can not find anyway to do this! This should be simple and is easy to achieve using UIkit.
I'm sick of this I can't figure out why Apple makes its so hard to get an app uploaded anymore... I have all the stupid icon files in the app and I'm still getting these errors.
App Store Connect Operation Error
ERROR ITMS-90032: "Invalid Image Path - No image found at the path referenced under key 'CFBundleIcons': 'AppIcon74x55'"
App Store Connect Operation Error
ERROR ITMS-90649: "Missing App Icon. The bundle doesn’t contain an iMessage app icon. iMessage app icons must be 81x60 pixels in .png format."
App Store Connect Operation Error
ERROR ITMS-90649: "Missing App Icon. The bundle doesn’t contain an iMessage app icon. iMessage app icons must be 148x110 pixels in .png format."
App Store Connect Operation Error
ERROR ITMS-90649: "Missing App Icon. The bundle doesn’t contain an iMessage app icon. iMessage app icons must be 134x100 pixels in .png format."
App Store Connect Operation Error
ERROR ITMS-90649: "Missing App Icon. The bundle doesn’t contain an iMessage app icon. iMessage app icons must be 180x135 pixels in .png format."
Can anyone please tell me why ecocide is acting like a Microsoft product?