Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.

Commit af74f4a

Browse files
author
Scott Goodson
committed
Fix the AsyncDisplayKit tests under Xcode 7! Workaround for unfixed Apple bug with @dynamic on CALayer.
1 parent d6289d5 commit af74f4a

5 files changed

Lines changed: 69 additions & 26 deletions

File tree

AsyncDisplayKit-Prefix.gcda

0 Bytes
Binary file not shown.

AsyncDisplayKit.xcodeproj/project.pbxproj

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -461,10 +461,10 @@
461461
DE040EF91C2B40AC004692FF /* ASCollectionViewFlowLayoutInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = 251B8EF41BBB3D690087C538 /* ASCollectionViewFlowLayoutInspector.h */; settings = {ATTRIBUTES = (Public, ); }; };
462462
DE6EA3221C14000600183B10 /* ASDisplayNode+FrameworkPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6EA3211C14000600183B10 /* ASDisplayNode+FrameworkPrivate.h */; };
463463
DE6EA3231C14000600183B10 /* ASDisplayNode+FrameworkPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = DE6EA3211C14000600183B10 /* ASDisplayNode+FrameworkPrivate.h */; };
464-
DEC447B51C2B9DBC00C8CBD1 /* ASDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = DEC447B31C2B9DBC00C8CBD1 /* ASDelegateProxy.h */; };
465-
DEC447B61C2B9DBC00C8CBD1 /* ASDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = DEC447B31C2B9DBC00C8CBD1 /* ASDelegateProxy.h */; };
466-
DEC447B71C2B9DBC00C8CBD1 /* ASDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC447B41C2B9DBC00C8CBD1 /* ASDelegateProxy.m */; };
467-
DEC447B81C2B9DBC00C8CBD1 /* ASDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DEC447B41C2B9DBC00C8CBD1 /* ASDelegateProxy.m */; };
464+
DE8BEAC11C2DF3FC00D57C12 /* ASDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = DE8BEABF1C2DF3FC00D57C12 /* ASDelegateProxy.h */; };
465+
DE8BEAC21C2DF3FC00D57C12 /* ASDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = DE8BEABF1C2DF3FC00D57C12 /* ASDelegateProxy.h */; };
466+
DE8BEAC31C2DF3FC00D57C12 /* ASDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8BEAC01C2DF3FC00D57C12 /* ASDelegateProxy.m */; };
467+
DE8BEAC41C2DF3FC00D57C12 /* ASDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = DE8BEAC01C2DF3FC00D57C12 /* ASDelegateProxy.m */; };
468468
DECBD6E71BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
469469
DECBD6E81BE56E1900CF4905 /* ASButtonNode.h in Headers */ = {isa = PBXBuildFile; fileRef = DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
470470
DECBD6E91BE56E1900CF4905 /* ASButtonNode.mm in Sources */ = {isa = PBXBuildFile; fileRef = DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */; };
@@ -758,8 +758,8 @@
758758
D785F6601A74327E00291744 /* ASScrollNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASScrollNode.h; sourceTree = "<group>"; };
759759
D785F6611A74327E00291744 /* ASScrollNode.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASScrollNode.m; sourceTree = "<group>"; };
760760
DE6EA3211C14000600183B10 /* ASDisplayNode+FrameworkPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ASDisplayNode+FrameworkPrivate.h"; sourceTree = "<group>"; };
761-
DEC447B31C2B9DBC00C8CBD1 /* ASDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDelegateProxy.h; sourceTree = "<group>"; };
762-
DEC447B41C2B9DBC00C8CBD1 /* ASDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASDelegateProxy.m; sourceTree = "<group>"; };
761+
DE8BEABF1C2DF3FC00D57C12 /* ASDelegateProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASDelegateProxy.h; sourceTree = "<group>"; };
762+
DE8BEAC01C2DF3FC00D57C12 /* ASDelegateProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ASDelegateProxy.m; sourceTree = "<group>"; };
763763
DECBD6E51BE56E1900CF4905 /* ASButtonNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASButtonNode.h; sourceTree = "<group>"; };
764764
DECBD6E61BE56E1900CF4905 /* ASButtonNode.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ASButtonNode.mm; sourceTree = "<group>"; };
765765
EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AsyncDisplayKitTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -1155,8 +1155,8 @@
11551155
25B171EA1C12242700508A7A /* Data Controller */ = {
11561156
isa = PBXGroup;
11571157
children = (
1158-
DEC447B31C2B9DBC00C8CBD1 /* ASDelegateProxy.h */,
1159-
DEC447B41C2B9DBC00C8CBD1 /* ASDelegateProxy.m */,
1158+
DE8BEABF1C2DF3FC00D57C12 /* ASDelegateProxy.h */,
1159+
DE8BEAC01C2DF3FC00D57C12 /* ASDelegateProxy.m */,
11601160
251B8EF21BBB3D690087C538 /* ASCollectionDataController.h */,
11611161
251B8EF31BBB3D690087C538 /* ASCollectionDataController.mm */,
11621162
464052191A3F83C40061C0BA /* ASDataController.h */,
@@ -1272,7 +1272,7 @@
12721272
18C2ED7E1B9B7DE800F627B3 /* ASCollectionNode.h in Headers */,
12731273
257754C01BEE458E00737CA5 /* ASTextNodeWordKerner.h in Headers */,
12741274
AC3C4A511A1139C100143C57 /* ASCollectionView.h in Headers */,
1275-
DEC447B51C2B9DBC00C8CBD1 /* ASDelegateProxy.h in Headers */,
1275+
DE8BEAC11C2DF3FC00D57C12 /* ASDelegateProxy.h in Headers */,
12761276
205F0E1D1B373A2C007741D0 /* ASCollectionViewLayoutController.h in Headers */,
12771277
AC3C4A541A113EEC00143C57 /* ASCollectionViewProtocols.h in Headers */,
12781278
058D0A49195D05CB00B7D73C /* ASControlNode+Subclasses.h in Headers */,
@@ -1441,7 +1441,7 @@
14411441
34EFC7791B701D3600AD841F /* ASLayoutSpecUtilities.h in Headers */,
14421442
B350625C1B010F070018CF92 /* ASLog.h in Headers */,
14431443
0442850E1BAA64EC00D16268 /* ASMultidimensionalArrayUtils.h in Headers */,
1444-
DEC447B61C2B9DBC00C8CBD1 /* ASDelegateProxy.h in Headers */,
1444+
DE8BEAC21C2DF3FC00D57C12 /* ASDelegateProxy.h in Headers */,
14451445
B35062041B010EFD0018CF92 /* ASMultiplexImageNode.h in Headers */,
14461446
DECBD6E81BE56E1900CF4905 /* ASButtonNode.h in Headers */,
14471447
B35062241B010EFD0018CF92 /* ASMutableAttributedStringBuilder.h in Headers */,
@@ -1697,7 +1697,7 @@
16971697
0549634A1A1EA066000F8E56 /* ASBasicImageDownloader.mm in Sources */,
16981698
299DA1AA1A828D2900162D41 /* ASBatchContext.mm in Sources */,
16991699
AC6456091B0A335000CF11B8 /* ASCellNode.m in Sources */,
1700-
DEC447B71C2B9DBC00C8CBD1 /* ASDelegateProxy.m in Sources */,
1700+
DE8BEAC31C2DF3FC00D57C12 /* ASDelegateProxy.m in Sources */,
17011701
ACF6ED1D1B17843500DA7C62 /* ASCenterLayoutSpec.mm in Sources */,
17021702
18C2ED801B9B7DE800F627B3 /* ASCollectionNode.m in Sources */,
17031703
92DD2FE41BF4B97E0074C9DD /* ASMapNode.mm in Sources */,
@@ -1827,7 +1827,7 @@
18271827
509E68621B3AEDA5009B9150 /* ASAbstractLayoutController.mm in Sources */,
18281828
254C6B861BF94F8A003EC431 /* ASTextKitContext.mm in Sources */,
18291829
34EFC7621B701CA400AD841F /* ASBackgroundLayoutSpec.mm in Sources */,
1830-
DEC447B81C2B9DBC00C8CBD1 /* ASDelegateProxy.m in Sources */,
1830+
DE8BEAC41C2DF3FC00D57C12 /* ASDelegateProxy.m in Sources */,
18311831
B35062141B010EFD0018CF92 /* ASBasicImageDownloader.mm in Sources */,
18321832
B35062161B010EFD0018CF92 /* ASBatchContext.mm in Sources */,
18331833
AC47D9421B3B891B00AAEE9D /* ASCellNode.m in Sources */,
@@ -1934,6 +1934,7 @@
19341934
CLANG_WARN_UNREACHABLE_CODE = YES;
19351935
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
19361936
ENABLE_STRICT_OBJC_MSGSEND = YES;
1937+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
19371938
GCC_PREPROCESSOR_DEFINITIONS = (
19381939
"DEBUG=1",
19391940
"$(inherited)",
@@ -1954,6 +1955,7 @@
19541955
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
19551956
COPY_PHASE_STRIP = NO;
19561957
ENABLE_STRICT_OBJC_MSGSEND = YES;
1958+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
19571959
INFOPLIST_FILE = AsyncDisplayKitTestHost/Info.plist;
19581960
IPHONEOS_DEPLOYMENT_TARGET = 7.0;
19591961
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -2041,6 +2043,7 @@
20412043
APPLICATION_EXTENSION_API_ONLY = YES;
20422044
DSTROOT = /tmp/AsyncDisplayKit.dst;
20432045
GCC_INPUT_FILETYPE = automatic;
2046+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
20442047
GCC_PRECOMPILE_PREFIX_HEADER = YES;
20452048
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
20462049
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
@@ -2059,6 +2062,7 @@
20592062
APPLICATION_EXTENSION_API_ONLY = YES;
20602063
DSTROOT = /tmp/AsyncDisplayKit.dst;
20612064
GCC_INPUT_FILETYPE = automatic;
2065+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
20622066
GCC_PRECOMPILE_PREFIX_HEADER = YES;
20632067
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
20642068
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
@@ -2081,6 +2085,7 @@
20812085
"$(inherited)",
20822086
"$(DEVELOPER_FRAMEWORKS_DIR)",
20832087
);
2088+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
20842089
GCC_PRECOMPILE_PREFIX_HEADER = YES;
20852090
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
20862091
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -2108,6 +2113,7 @@
21082113
"$(inherited)",
21092114
"$(DEVELOPER_FRAMEWORKS_DIR)",
21102115
);
2116+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
21112117
GCC_PRECOMPILE_PREFIX_HEADER = YES;
21122118
GCC_PREFIX_HEADER = "AsyncDisplayKit/AsyncDisplayKit-Prefix.pch";
21132119
GCC_PREPROCESSOR_DEFINITIONS = (
@@ -2136,6 +2142,7 @@
21362142
DYLIB_CURRENT_VERSION = 1;
21372143
DYLIB_INSTALL_NAME_BASE = "@rpath";
21382144
ENABLE_STRICT_OBJC_MSGSEND = YES;
2145+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
21392146
GCC_NO_COMMON_BLOCKS = YES;
21402147
GCC_PREPROCESSOR_DEFINITIONS = (
21412148
"DEBUG=1",
@@ -2168,6 +2175,7 @@
21682175
DYLIB_CURRENT_VERSION = 1;
21692176
DYLIB_INSTALL_NAME_BASE = "@rpath";
21702177
ENABLE_STRICT_OBJC_MSGSEND = YES;
2178+
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = NO;
21712179
GCC_NO_COMMON_BLOCKS = YES;
21722180
INFOPLIST_FILE = "$(SRCROOT)/AsyncDisplayKit-iOS/Info.plist";
21732181
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";

AsyncDisplayKit.xcworkspace/contents.xcworkspacedata

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

AsyncDisplayKit/ASDisplayNode.mm

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2317,7 +2317,6 @@ - (NSString *)asciiArtName
23172317
static const char *ASDisplayNodeAssociatedNodeKey = "ASAssociatedNode";
23182318

23192319
@implementation UIView (ASDisplayNodeInternal)
2320-
@dynamic asyncdisplaykit_node;
23212320

23222321
- (void)setAsyncdisplaykit_node:(ASDisplayNode *)node
23232322
{
@@ -2326,16 +2325,24 @@ - (void)setAsyncdisplaykit_node:(ASDisplayNode *)node
23262325

23272326
- (ASDisplayNode *)asyncdisplaykit_node
23282327
{
2329-
ASDisplayNode *node = objc_getAssociatedObject(self, ASDisplayNodeAssociatedNodeKey);
2330-
return node;
2328+
return objc_getAssociatedObject(self, ASDisplayNodeAssociatedNodeKey);
23312329
}
23322330

23332331
@end
23342332

23352333
@implementation CALayer (ASDisplayNodeInternal)
2336-
@dynamic asyncdisplaykit_node;
2337-
@end
23382334

2335+
- (void)setAsyncdisplaykit_node:(ASDisplayNode *)node
2336+
{
2337+
objc_setAssociatedObject(self, ASDisplayNodeAssociatedNodeKey, node, OBJC_ASSOCIATION_ASSIGN); // Weak reference to avoid cycle, since the node retains the layer.
2338+
}
2339+
2340+
- (ASDisplayNode *)asyncdisplaykit_node
2341+
{
2342+
return objc_getAssociatedObject(self, ASDisplayNodeAssociatedNodeKey);
2343+
}
2344+
2345+
@end
23392346

23402347
@implementation UIView (AsyncDisplayKit)
23412348

AsyncDisplayKit/Details/Transactions/_ASAsyncTransactionContainer.m

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,53 @@
1010

1111
#import "_ASAsyncTransaction.h"
1212
#import "_ASAsyncTransactionGroup.h"
13+
#import <objc/runtime.h>
14+
15+
static const char *ASDisplayNodeAssociatedTransactionsKey = "ASAssociatedTransactions";
16+
static const char *ASDisplayNodeAssociatedCurrentTransactionKey = "ASAssociatedCurrentTransaction";
1317

1418
@implementation CALayer (ASAsyncTransactionContainerTransactions)
15-
@dynamic asyncdisplaykit_asyncLayerTransactions;
16-
@dynamic asyncdisplaykit_currentAsyncLayerTransaction;
19+
20+
- (_ASAsyncTransaction *)asyncdisplaykit_currentAsyncLayerTransaction
21+
{
22+
return objc_getAssociatedObject(self, ASDisplayNodeAssociatedCurrentTransactionKey);
23+
}
24+
25+
- (void)asyncdisplaykit_setCurrentAsyncLayerTransaction:(_ASAsyncTransaction *)transaction
26+
{
27+
objc_setAssociatedObject(self, ASDisplayNodeAssociatedCurrentTransactionKey, transaction, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
28+
}
29+
30+
- (NSHashTable *)asyncdisplaykit_asyncLayerTransactions
31+
{
32+
return objc_getAssociatedObject(self, ASDisplayNodeAssociatedTransactionsKey);
33+
}
34+
35+
- (void)asyncdisplaykit_setAsyncLayerTransactions:(NSHashTable *)transactions
36+
{
37+
objc_setAssociatedObject(self, ASDisplayNodeAssociatedTransactionsKey, transactions, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
38+
}
1739

1840
// No-ops in the base class. Mostly exposed for testing.
1941
- (void)asyncdisplaykit_asyncTransactionContainerWillBeginTransaction:(_ASAsyncTransaction *)transaction {}
2042
- (void)asyncdisplaykit_asyncTransactionContainerDidCompleteTransaction:(_ASAsyncTransaction *)transaction {}
2143
@end
2244

45+
static const char *ASAsyncTransactionIsContainerKey = "ASTransactionIsContainer";
46+
2347
@implementation CALayer (ASDisplayNodeAsyncTransactionContainer)
2448

25-
@dynamic asyncdisplaykit_asyncTransactionContainer;
49+
- (BOOL)asyncdisplaykit_isAsyncTransactionContainer
50+
{
51+
CFBooleanRef isContainerBool = (__bridge CFBooleanRef)objc_getAssociatedObject(self, ASAsyncTransactionIsContainerKey);
52+
BOOL isContainer = (isContainerBool == kCFBooleanTrue);
53+
return isContainer;
54+
}
55+
56+
- (void)asyncdisplaykit_setAsyncTransactionContainer:(BOOL)isContainer
57+
{
58+
objc_setAssociatedObject(self, ASAsyncTransactionIsContainerKey, (id)(isContainer ? kCFBooleanTrue : kCFBooleanFalse), OBJC_ASSOCIATION_ASSIGN);
59+
}
2660

2761
- (ASAsyncTransactionContainerState)asyncdisplaykit_asyncTransactionContainerState
2862
{

0 commit comments

Comments
 (0)