Giter Site home page Giter Site logo

movieswiftui's Introduction

Xcode build

MovieSwiftUI

MovieSwiftUI is an application that uses the MovieDB API and is built with SwiftUI. It demos some SwiftUI (& Combine) concepts. The goal is to make a real world application using SwiftUI only. It'll be updated with new features as they come to the SwiftUI framework.

I have written a series of articles that document the design and architecture of the app: Making a Real World Application With SwiftUI.

App Image

Architecture

MovieSwiftUI data flow is a subset and a custom implementation of the Flux part of Redux. It implement the State in an ObservableObject as a @Published wrapped property, so changes are published whenever a dispatched action produces a new state after being reduced. The state is injected as an environment object in the root view of the application, and is easily accessible anywhere in the application. SwiftUI does all aspects of diffing on the render pass when your state changes. No need to be clever when extracting props from your State, they're simple dynamic vars at the view level. No matter your objects' graph size, SwiftUI speed depends on the complexity of your views hierarchy, not the complexity of your object graph.

SwiftUI

MovieSwiftUI is in pure Swift UI, the goal is to see how far SwiftUI can go in its current implementation without using anything from UIKit (basically no UIView/UIViewController representable).

It'll evolve with SwiftUI, every time Apple edits existing or adds new features to the framework.

Platforms

Currently MovieSwiftUI runs on iPhone, iPad, and macOS.

Follow me on Twitter to get the latest update about features, code and SwiftUI tips and tricks!

movieswiftui's People

Contributors

carywill avatar chriseidhof avatar codeslubber avatar danglu999 avatar dev1an avatar dimillian avatar doronkatz avatar kevinquisquater avatar kmt901 avatar mortengregersen avatar steven0351 avatar yakovmanshin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

movieswiftui's Issues

The hidden performance issue of single store, especially in NavigationView

I applied your single store concept into my project and found some performance issues. Here is my example

Background

  1. NextUpRootView is the root navigation view
  2. Click navigation item to push RaceCard. In RaceCard, fetch racing data via getRaceCard
  3. Both NextUpRootView and RaceCard have @EnvironmentObject var store: Store

Problem

  • NextUpRootView comes useless re-rendering even I'm on RaceCard after a getRaceCard operation. This could be a performance problem if navigation view comes a big stack(views). In my application, it also comes a very strange behavior: when i'm on RaceCard page and execute getRaceCard, the app automatically pop back to NextUpRootView view;
  • @EnvironmentObject var store: Store is the evil. Because as long as our state changes, all view that have this has to be rendered again

Code snippets

// root view controller

struct NextUpRootView: View {
    @EnvironmentObject var store: Store
    private var racing: AppState.Racing { store.appState.racing }
    ...

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: RaceCard(data: self.raceCardData))
    }
}

// race card

struct RaceCard: View {
    
    @EnvironmentObject private var store: Store
    @ObservedObject var viewModel = RaceCardModel()
    
    init(data: VRaceCard) {
        self.viewModel.meetingId = data.meetingId
        self.viewModel.raceId = data.raceId
        self.viewModel.selectedRaceNumber = "\(data.raceNumber - 1)"
    }

    var body: some View {
        VStack(spacing: 0) {
            RaceTable(selectedProductGroupId: viewModel.selectedProductGroupId, raceId: viewModel.raceId)
        }
            .onReceive(viewModel.$selectedRaceNumber, perform: { _ in
                self.getRaceCard()
            })
    }
}

extension RaceCard {
    private func getRaceCard() {
        store.dispatch(.racing(.getRacecard(raceId: viewModel.raceId)))
    }
 
}

App Crashes

Hello,

The app crashes as soon as I scroll the list of movies. What am I doing wrong?

Also I love this app, why is it not on the App Store?

iOS 14 Beta 4 & 5 crash

When scrolling through MoviesList or MovieDetail, the app crashes: Terminating app due to uncaught exception 'CALayerInvalidGeometry', reason: 'CALayer position contains NaN: [inf nan]

Bug: People Detail UI Layout & Back Button Problem

Hi again Thomas,

Here is the second bug.

Case: When you go to the People Detail from Movie Detail or Fan Club tab, UI looks like has layout problem and back button doesn't work so user couldn't go back or anywhere.

I think It's because of animations. When I remove animations it works properly. You can check my PR out.
PR: #77

Simulator Screen Recording - iPhone 15 Pro - 2024-01-17 at 17 42 09
Simulator Screen Recording - iPhone 15 Pro - 2024-01-17 at 17 41 41

App not usable in Xcode 11 Beta2 simulator

Wanted to check if there is an issue on my end or if this is happening for everyone.
Running the app on the emulator is painfully slow. Every touch requires 10-15 secs to be performed. I don't have a real device with iOS 13 to test it, but wanted to know if it's an app optimization issue or beta simulator issue.

There is overlap between image and the indicator of scrollview

Tabview Mylist -> Create Custom List -> Search List Cover

  1. It is difficult to see the indicator of scrollview if the color of an image is dark.
    before

  2. Only one image is displayed in a row if the app runs on 4.0-inch devices such as iPod touch, users can not easily identify that is a scroll view.
    before2

contextMenu selects whole HStack

For example in PeopleRow when you press and hold on a person it selects whole hstack and when you tap on "Add to fan club" it adds first person in that hstack.

Ekran Resmi 2020-07-10 01 03 28

Trailer implementation

Hi, first I have to say it is a nice job. Great SwiftUI example!

One question, are you going to implement the trailer option of the film?

Thank you!

Segmented state not shown

Not sure if somebody noticed this already? I tried this in the simulator (iPhone 11 Pro Max 13.4)

Screen Recording 2020-03-27 at 16 29 24

Suggestion: use statics instead of free-range globals

Firstly, this is a very nicely written project. The code is clear, well-written. Thank you for sharing the project with us.

However, I was confused by some free-roaming globals (e.g. 'store', ''sampleMovie'). These are very hard to follow, particularly when not using an IDE (e.g. reading code on GitHub). I spent time looking for subclass properties, local vars, extensions etc.

Suggestion: add such properties and functions as static members on the relevant types. This provides context at the call site.

e.g.

struct Movie: Codable, Identifiable {
    static let sampleMovie = Movie(...)
    ...
}

print(Movie.sampleMovie.id)

Cheers.

Confused about OffsetTopPreferenceKey

I know that this may not be the appropriate place to ask for this, so I apologise in advance if that's the case.

Could you explain the purpose of these lines (and of the OffsetTopPreferenceKey)?

.preference(key: OffsetTopPreferenceKey.self,
value: reader.frame(in: .global).minY)

I see you are listening for onPreferenceChange on the SearchFields but the expected end result escapes me. I tried removing the two lines but I haven't spotted any difference, at least not on the iOS Simulator.

TabbedView forgets state

If you tap a movie in the movies tab, then tap the "My Lists" tab, then switch back to the movies tab, the app forgets that you tapped a movie and resets to the standard view.

I'm currently playing around with TabbedView in a different project and would be interested on how you would solve this. As far as I understand views are supposed to be "disposable", but storing the state of the subviews in the TabbedView itself feels wrong too...

View Preview - UI Package

Is there any way to preview a views in the UI package? For example PopularityBadge.swift? I'm getting such an error.

image

App crashes on selection of the keywords cell

  1. Go to the movie detail view
  2. Wait for keywords cell to appear
  3. Select the cell
  4. App presents the next view, then navigates back to movie details view and crashes:
2019-07-05 17:04:38.789573+0100 MovieSwift[59287:8790893] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of sections. The number of sections contained in the table view after the update (3) must be equal to the number of sections contained in the table view before the update (3), plus or minus the number of sections inserted or deleted (1 inserted, 0 deleted).'
*** First throw call stack:
(
	0   CoreFoundation                      0x00007fff23af9c3e __exceptionPreprocess + 350
	1   libobjc.A.dylib                     0x00007fff50131de0 objc_exception_throw + 48
	2   CoreFoundation                      0x00007fff23af99b8 +[NSException raise:format:arguments:] + 88
	3   Foundation                          0x00007fff255749ad -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 191
	4   UIKitCore                           0x00007fff46e5975c -[UITableView _Bug_Detected_In_Client_Of_UITableView_Invalid_Number_Of_Sections:] + 193
	5   UIKitCore                           0x00007fff46e58861 -[UITableView _endCellAnimationsWithContext:] + 14394
	6   UIKitCore                           0x00007fff46e72a88 -[UITableView endUpdatesWithContext:] + 112
	7   UIKitCore                           0x00007fff46e72c34 -[UITableView _performBatchUpdates:withContext:completion:] + 253
	8   UIKitCore                           0x00007fff46e72d4c -[UITableView performBatchUpdates:completion:] + 98
	9   SwiftUI                             0x00007fff2c24c016 $s7SwiftUI25UpdateCoalescingTableView33_BFB370BA5F1BADDC9D83021565761A49LLC19performBatchUpdates_10completionyyycSg_ySbcSgtF + 470
	10  SwiftUI                             0x00007fff2c24c19f $s7SwiftUI25UpdateCoalescingTableView33_BFB370BA5F1BADDC9D83021565761A49LLC19performBatchUpdates_10completionyyycSg_ySbcSgtFTo + 175
	11  SwiftUI                             0x00007fff2c24e151 $s7SwiftUI19ListCoreCoordinator33_BFB370BA5F1BADDC9D83021565761A49LLC17updateUITableView_4from2toySo0mN0C_xxtF + 1521
	12  SwiftUI                             0x00007fff2c24cb61 $s7SwiftUI9_ListCore33_BFB370BA5F1BADDC9D83021565761A49LLV12updateUIView_7contextySo11UITableViewC_AA0L20RepresentableContextVyADyxq_GGtF + 657
	13  SwiftUI                             0x00007fff2c573361 $s7SwiftUI32PlatformViewRepresentableAdaptor33_19642D833A8FE469B137699ED1426762LLV06updateD8Provider_7contexty10UIViewTypeQz_AA0cdE7ContextVyADyxGGtF + 289
	14  SwiftUI                             0x00007fff2c2b322d $s7SwiftUI17PlatformViewChildV6update7contexty14AttributeGraph0H7ContextVyACyxGGz_tFyyXEfU_ + 2205
	15  SwiftUI                             0x00007fff2c2ae526 $s7SwiftUI17PlatformViewChildV6update7contexty14AttributeGraph0H7ContextVyACyxGGz_tF + 310
	16  SwiftUI                             0x00007fff2c2b4160 $s7SwiftUI17PlatformViewChildVyxG14AttributeGraph07UntypedF0AaeFP7_update_5graph9attributeySv_So10AGGraphRefaSo11AGAttributeatFZTW + 32
	17  AttributeGraph                      0x00007fff2f2f18c9 $sTA + 25
	18  AttributeGraph                      0x00007fff2f2db3ba _ZN2AG5Graph11UpdateStack6updateEv + 1104
	19  AttributeGraph                      0x00007fff2f2db639 _ZN2AG5Graph16update_attributeEjb + 377
	20  AttributeGraph                      0x00007fff2f2dff01 _ZN2AG8Subgraph6updateEj + 943
	21  SwiftUI                             0x00007fff2c18e5c0 $s7SwiftUI9ViewGraphC14runTransaction33_D63C4EB7F2B205694B6515509E76E98BLL2inySo10AGGraphRefa_tF + 224
	22  SwiftUI                             0x00007fff2c18e48d $s7SwiftUI9ViewGraphC15syncTransaction33_D63C4EB7F2B205694B6515509E76E98BLLyyAA0F0V_ySo10AGGraphRefaXEtFyAIXEfU_03$s7a23UI16AsyncTransaction33_ghijklmn18BLLC5applyyyFySo10O9RefaXEfU_AA0sF0AELLCTf1nnnc_n + 125
	23  SwiftUI                             0x00007fff2c18e374 $s7SwiftUI9ViewGraphC15syncTransaction33_D63C4EB7F2B205694B6515509E76E98BLLyyAA0F0V_ySo10AGGraphRefaXEtF03$s7a23UI16AsyncTransaction33_ghijklmn18BLLC5applyyyFySo10O9RefaXEfU_AA0sF0AELLCTf1ncn_n + 100
	24  SwiftUI                             0x00007fff2c18e2fd $s7SwiftUI16AsyncTransaction33_D63C4EB7F2B205694B6515509E76E98BLLC5applyyyF + 141
	25  SwiftUI                             0x00007fff2c1a6eac $sIeg_ytIegr_TR + 12
	26  SwiftUI                             0x00007fff2c45b031 $sIeg_ytIegr_TRTA + 17
	27  SwiftUI                             0x00007fff2c45b289 $sIeg_ytIegr_TRTA.8 + 9
	28  SwiftUI                             0x00007fff2c45a561 $s7SwiftUI16ViewRendererHostPAAE25dispatchPostUpdateActions33_6C396F98EFDD04A6B58F2F9112448013LLyyFyyXEfU_ + 193
	29  SwiftUI                             0x00007fff2c45a1e7 $s7SwiftUI16ViewRendererHostPAAE25dispatchPostUpdateActions33_6C396F98EFDD04A6B58F2F9112448013LLyyF + 439
	30  SwiftUI                             0x00007fff2c45402a $s7SwiftUI16ViewRendererHostPAAE9endUpdateyyF + 154
	31  SwiftUI                             0x00007fff2c45479d $s7SwiftUI16ViewRendererHostPAAE18performAfterUpdateyyyycF + 205
	32  SwiftUI                             0x00007fff2c182f36 $s7SwiftUI9ViewGraphC16asyncTransaction_8mutationyAA0F0V_xtAA0D8MutationRzlFAA012InvalidatingdH0V_Tg5Tm + 294
	33  SwiftUI                             0x00007fff2c2335fe $s7SwiftUI31AttributeInvalidatingSubscriberC010invalidateC033_986362D34F2D1941B9A0AD4E9CF57D06LLyyF + 334
	34  SwiftUI                             0x00007fff2c233683 $s7SwiftUI31AttributeInvalidatingSubscriberC7receivey7Combine11SubscribersO6DemandV6OutputQzF + 83
	35  SwiftUI                             0x00007fff2c233ad0 $s7SwiftUI31AttributeInvalidatingSubscriberCyxG7Combine0E0AaeFP7receiveyAE11SubscribersO6DemandV5InputQzFTW + 16
	36  Combine                             0x00007fff23245da7 $s7Combine10SubscriberP7receiveyAA11SubscribersO6DemandV5InputQzFTj + 7
	37  SwiftUI                             0x00007fff2c337083 $s7SwiftUI20SubscriptionLifetimeC10Connection33_584E3B65D1FB8867743A7329537CB053LLV7receivey7Combine11SubscribersO6DemandV6OutputQzF + 163
	38  SwiftUI                             0x00007fff2c337149 $s7SwiftUI20SubscriptionLifetimeC10Connection33_584E3B65D1FB8867743A7329537CB053LLVyx_qd__G7Combine10SubscriberAahIP7receiveyAH11SubscribersO6DemandV5InputQzFTW + 9
	39  Combine                             0x00007fff232466e3 $sTA.5 + 67
	40  Combine                             0x00007fff2321091a $s7Combine13AnySubscriberV7receiveyAA11SubscribersO6DemandVxF + 42
	41  Combine                             0x00007fff2321aa95 $s7Combine18PassthroughSubjectC7ConduitC5offeryyxF + 261
	42  Combine                             0x00007fff2321b506 $s7Combine18PassthroughSubjectC4sendyyxFyAC7ConduitCyxq__GXEfU_TA + 22
	43  Combine                             0x00007fff2321b524 $s7Combine18PassthroughSubjectC7ConduitCyxq__Gs5Error_pIggzo_AFsAG_pIegnzo_sAGR_r0_lTRTA + 20
	44  libswiftCore.dylib                  0x00007fff507395e4 $sSTsE7forEachyyy7ElementQzKXEKF + 452
	45  libswiftCore.dylib                  0x00007fff507b7a5d $ss26_RandomAccessCollectionBoxC8_forEachyyy7ElementQzKXEKF + 125
	46  libswiftCore.dylib                  0x00007fff508a0f8e $ss15_AnySequenceBoxC8_forEachyyyxKXEKFTj + 14
	47  Combine                             0x00007fff2321a949 $s7Combine18PassthroughSubjectC4sendyyxF + 457
	48  MovieSwift                          0x0000000109fd4966 $s11SwiftUIFlux5StoreC5statexvWyycfU_ + 182
	49  MovieSwift                          0x0000000109fd49ad $sIeg_IeyB_TR + 45
	50  libdispatch.dylib                   0x000000010a615e28 _dispatch_call_block_and_release + 12
	51  libdispatch.dylib                   0x000000010a616d9c _dispatch_client_callout + 8
	52  libdispatch.dylib                   0x000000010a624e54 _dispatch_main_queue_callback_4CF + 1500
	53  CoreFoundation                      0x00007fff23a5cbf9 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
	54  CoreFoundation                      0x00007fff23a57859 __CFRunLoopRun + 2329
	55  CoreFoundation                      0x00007fff23a56c16 CFRunLoopRunSpecific + 438
	56  GraphicsServices                    0x00007fff37a98bb0 GSEventRunModal + 65
	57  UIKitCore                           0x00007fff46c97bef UIApplicationMain + 1621
	58  MovieSwift                          0x0000000109e6dabb main + 75
	59  libdyld.dylib                       0x00007fff50fb24ad start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Crash EXC_BAD_ACCESS caused by simply running app, going into content and swiping back

Summary:
I am getting a EXC_BAD_ACCESS error in simulator and on device, by simply selecting a movie and then going back.

Steps to reproduct:

  1. Run application in Simulator (tested on device as well)
  2. Select on initial screen, a movie to navigate to detail screen.
  3. Press back button to go the list of movies screen.

Outcome:

  • Causes a crash Thread 1: EXC_BAD_ACCESS (code=2, address=0x7ffee68fcfe8)

Expected:

  • To swipe back and allow you to scroll and function with the application as per normal

Bug: MoviePosterImage frame is affected by animation

Using Simulator on 10.14.5, Xcode beta2

Problem

MoviePosterImage locations are being affected by the (opacity) animation being applied to them.

As each movie poster image is populated (via the ImageService callback), the view will unfade, but will also move, with a jarring effect.

To see this most clearly, launch in the Simulator with SlowAnimations enabled. Then alternate between the "Popular" and "Top Rated" tabs quickly.

Problem Area

MoviePosterImage.swift

struct PosterStyle: ViewModifier {
    let loaded: Bool
    func body(content: Content) -> some View {
        return content
			.frame(width: 100, height: 150)
            .cornerRadius(5)
        	.opacity(loaded ? 1 : 0.1)
            .shadow(radius: 8)
    }
}

It would appear that applying .animation(.basic()) in MoviePosterImage is actually applying the animation to all properties, frame included.

I have attempted to work around this, but have not yet succeeded.

Cannot build project.

Hi, I have tried to build the project but got some errors. The Xcode version is Version 11.0 beta 4 (11M374r)
Screenshot 2019-08-06 at 22 35 30

I will try to build it later with Xcode beta 5

Can't build unless you're Thomas Ricouard ;)

I don't feel like expending the effort of branching and doing a PR just to fix this little project file glitch. Here you go:

diff --git a/MovieSwift/MovieSwift.xcodeproj/project.pbxproj b/MovieSwift/MovieSwift.xcodeproj/project.pbxproj
index a8aa808..1f912ad 100644
--- a/MovieSwift/MovieSwift.xcodeproj/project.pbxproj
+++ b/MovieSwift/MovieSwift.xcodeproj/project.pbxproj
@@ -158,7 +158,7 @@
                6953B50A22D36FF500859723 /* CustomListCoverRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomListCoverRow.swift; sourceTree = "<group>"; };
                6953B50D22D3774E00859723 /* CustomListHeaderRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomListHeaderRow.swift; sourceTree = "<group>"; };
                6953B51222D44F9E00859723 /* Collection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Collection.swift; sourceTree = "<group>"; };
-               69583B4622E0561700C23048 /* MovieContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MovieContextMenu.swift; path = ../../../../../../../../../../../System/Volumes/Data/Users/thomasricouard/Documents/Glose/dev/MovieSwiftUI/MovieSwift/MovieSwift/views/shared/contextMenu/MovieContextMenu.swift; sourceTree = "<group>"; };
+               69583B4622E0561700C23048 /* MovieContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MovieContextMenu.swift; path = MovieContextMenu.swift; sourceTree = "<group>"; };
                695882B022ACFB5800AFABA9 /* ImageLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageLoader.swift; sourceTree = "<group>"; };
                695882B422AD008600AFABA9 /* TopRatedList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopRatedList.swift; sourceTree = "<group>"; };
                695882B722AD01C500AFABA9 /* MovieDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MovieDetail.swift; sourceTree = "<group>"; };

List row remains highlighted

I have observed that the List row remains highlighted when we come back from detail screen as shown in Screenshot. I have tried multiple things to resolve this but didn't find any solution. Ultimately I ended up using LazyVStack inside ScrollView in my application. I have observed when we keep List inside any container like VStack, Group etc this issue happens. As in MovieSwift app it happens for Movies Tab but not for Fan Club and My Lists.
simulator_screenshot_F54EBA25-FCB8-49C2-9A79-B8D014D3E09E

Project Compile Failed

I downloaded project and when start compile then it failed.
Please suggest me to work properly.
Screenshot 2019-06-23 at 11 55 11 am
Screenshot 2019-06-23 at 11 55 22 am
Screenshot 2019-06-23 at 11 55 31 am
Screenshot 2019-06-23 at 11 55 38 am

Images section - MovieBackdropImage fails to render

I have noticed that Images section fails to update with proper images. Did some investigation and it seems that i.e wrapping placeholder like that:

            ZStack {
              Text ("BUG?")
              Rectangle()
                  .frame(maxHeight: fill ? 50 : 300)
                  .aspectRatio(500/300, contentMode: fill || !isExpanded ? .fill : .fit)
                  .foregroundColor(.gray)
                  .opacity(0.1)
            }

Solves the issue, yet it's supper hacky and I have no clue, why it fails to render in first place. Any ideas?

run in xcode14 beta4 with ssl error

And all HTTP Request is failed

2020-08-11 09:47:24.847438+0800 MovieSwift[3694:91369] [boringssl] boringssl_context_error_print(1753) [C1.1:2][0x7fd9f6615130] Error: 140574129758056:error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER:/Library/Caches/com.apple.xbs/Sources/boringssl_Sim/boringssl-349/ssl/tls_record.cc:242:

Bug: Genre Detail Pop Back

Hi, Thomas

Such a great project thank you for sharing. I found a few bugs and I want to contribute to the project.

Here is the first one:

When you click movie genres from the movie details it goes to the genre list but after a short time it pops back. I think it's because of the navigation link codes you use. I will send you a PR so you can check it out. (Simulator - 15pro - iOS 17.0)

PR: #77

Simulator Screen Recording - iPhone 15 Pro - 2024-01-16 at 12 00 27

App crashes when People detail is selected for second time

The app crashes when you enter in a movie detail, then you select a cast person, then you go back, and then you select another cast person, the app tries to load but crashes.

Fatal error: Attempted to read an unowned reference but object 0x11e0bce70 was already deallocated2020-04-24 18:58:38.297498+0200 MovieSwiftUI[93921:42384112] Fatal error: Attempted to read an unowned reference but object 0x11e0bce70 was already deallocated

The main problem is that I can not debug it because it just says that :)

tvOS?

Just curious why tvOS isn't supported out of the box here by SwiftUI.

Was this a conscious decision or were there things you wanted to do that tvOS didn't let you?

Click itemView in ScrollView , the app got a crash

Click itemView in ScrollView , the app got a crash.
in MoviesHomePage grid style , click see all
in MovieDetail keywords cell , click title area got a recyle push/pop then crash

is it the iOS13's bug ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.