Add tvOS Target
This commit is contained in:
parent
f94ff45a9d
commit
fefa984414
|
@ -8,7 +8,10 @@ Pod::Spec.new do |s|
|
||||||
s.author = { "Reda Lemeden" => "git@kaishin.haz.email" }
|
s.author = { "Reda Lemeden" => "git@kaishin.haz.email" }
|
||||||
s.source = { :git => "https://github.com/kaishin/Gifu.git", :tag => "v#{s.version}", :submodules => true }
|
s.source = { :git => "https://github.com/kaishin/Gifu.git", :tag => "v#{s.version}", :submodules => true }
|
||||||
s.platform = :ios, "9.0"
|
s.platform = :ios, "9.0"
|
||||||
|
s.platform = :tvos, "9.0"
|
||||||
s.ios.source_files = "Source/**/*.{h,swift}"
|
s.ios.source_files = "Source/**/*.{h,swift}"
|
||||||
|
s.tvos.source_files = "Source/**/*.{h,swift}"
|
||||||
s.requires_arc = true
|
s.requires_arc = true
|
||||||
s.ios.deployment_target = "9.0"
|
s.ios.deployment_target = "9.0"
|
||||||
|
s.tvos.deployment_target = "9.0"
|
||||||
end
|
end
|
||||||
|
|
|
@ -20,6 +20,21 @@
|
||||||
00B8C7961A3650EE00C188E7 /* Gifu.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B8C7951A3650EE00C188E7 /* Gifu.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
00B8C7961A3650EE00C188E7 /* Gifu.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B8C7951A3650EE00C188E7 /* Gifu.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
00BF42CC1D99A1DC00C6F28D /* GIFAnimatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BF42CB1D99A1DC00C6F28D /* GIFAnimatable.swift */; };
|
00BF42CC1D99A1DC00C6F28D /* GIFAnimatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BF42CB1D99A1DC00C6F28D /* GIFAnimatable.swift */; };
|
||||||
00DD26EE1DA9643800A0F683 /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00DD26ED1DA9643800A0F683 /* UIImageView.swift */; };
|
00DD26EE1DA9643800A0F683 /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00DD26ED1DA9643800A0F683 /* UIImageView.swift */; };
|
||||||
|
71E8B2E620387D830037BA62 /* Gifu_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71E8B2DD20387D830037BA62 /* Gifu_tvOS.framework */; };
|
||||||
|
71E8B2ED20387D830037BA62 /* Gifu_tvOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 71E8B2DF20387D830037BA62 /* Gifu_tvOS.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
71E8B2F420387D8E0037BA62 /* AnimatedFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49CB01A3B6EEB00B395DF /* AnimatedFrame.swift */; };
|
||||||
|
71E8B2F520387D8E0037BA62 /* Animator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00978B6B1D9C6D2A00A6575F /* Animator.swift */; };
|
||||||
|
71E8B2F620387D8E0037BA62 /* FrameStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005656EC1A6F14D6008A0ED1 /* FrameStore.swift */; };
|
||||||
|
71E8B2F720387D8E0037BA62 /* GIFAnimatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00BF42CB1D99A1DC00C6F28D /* GIFAnimatable.swift */; };
|
||||||
|
71E8B2F820387D8E0037BA62 /* GIFImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005656EE1A6F1C26008A0ED1 /* GIFImageView.swift */; };
|
||||||
|
71E8B2F920387D910037BA62 /* Array.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007E08431BD95E6200883D0C /* Array.swift */; };
|
||||||
|
71E8B2FA20387D910037BA62 /* CGSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 009BD1431BBC93C800FC982B /* CGSize.swift */; };
|
||||||
|
71E8B2FB20387D910037BA62 /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49C7E1A3A4DE000B395DF /* UIImage.swift */; };
|
||||||
|
71E8B2FC20387D910037BA62 /* UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00DD26ED1DA9643800A0F683 /* UIImageView.swift */; };
|
||||||
|
71E8B2FD20387D950037BA62 /* ImageSourceHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B8C75C1A364DCE00C188E7 /* ImageSourceHelpers.swift */; };
|
||||||
|
71E8B30220387E1E0037BA62 /* nailed.gif in Resources */ = {isa = PBXBuildFile; fileRef = 71E8B30020387E1E0037BA62 /* nailed.gif */; };
|
||||||
|
71E8B30320387E1E0037BA62 /* mugen.gif in Resources */ = {isa = PBXBuildFile; fileRef = 71E8B30120387E1E0037BA62 /* mugen.gif */; };
|
||||||
|
71E8B30420387ED70037BA62 /* Gifu_tvOSTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71E8B2CE20387CE60037BA62 /* Gifu_tvOSTests.swift */; };
|
||||||
EAF49C7F1A3A4DE000B395DF /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49C7E1A3A4DE000B395DF /* UIImage.swift */; };
|
EAF49C7F1A3A4DE000B395DF /* UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49C7E1A3A4DE000B395DF /* UIImage.swift */; };
|
||||||
EAF49CB11A3B6EEB00B395DF /* AnimatedFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49CB01A3B6EEB00B395DF /* AnimatedFrame.swift */; };
|
EAF49CB11A3B6EEB00B395DF /* AnimatedFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF49CB01A3B6EEB00B395DF /* AnimatedFrame.swift */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
@ -32,6 +47,13 @@
|
||||||
remoteGlobalIDString = 00B8C73D1A364DA400C188E7;
|
remoteGlobalIDString = 00B8C73D1A364DA400C188E7;
|
||||||
remoteInfo = Gifu;
|
remoteInfo = Gifu;
|
||||||
};
|
};
|
||||||
|
71E8B2E720387D830037BA62 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 00B8C7351A364DA400C188E7 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 71E8B2DC20387D830037BA62;
|
||||||
|
remoteInfo = Gifu_tvOS;
|
||||||
|
};
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
|
@ -51,6 +73,15 @@
|
||||||
00B8C7951A3650EE00C188E7 /* Gifu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gifu.h; sourceTree = "<group>"; };
|
00B8C7951A3650EE00C188E7 /* Gifu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gifu.h; sourceTree = "<group>"; };
|
||||||
00BF42CB1D99A1DC00C6F28D /* GIFAnimatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GIFAnimatable.swift; sourceTree = "<group>"; };
|
00BF42CB1D99A1DC00C6F28D /* GIFAnimatable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GIFAnimatable.swift; sourceTree = "<group>"; };
|
||||||
00DD26ED1DA9643800A0F683 /* UIImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageView.swift; sourceTree = "<group>"; };
|
00DD26ED1DA9643800A0F683 /* UIImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImageView.swift; sourceTree = "<group>"; };
|
||||||
|
71E8B2B82038784C0037BA62 /* Gifu_tvOS-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "Gifu_tvOS-Info.plist"; path = "/Users/gruppionim/Documents/Developer/Github/Gifu/Gifu_tvOS-Info.plist"; sourceTree = "<absolute>"; };
|
||||||
|
71E8B2CE20387CE60037BA62 /* Gifu_tvOSTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Gifu_tvOSTests.swift; sourceTree = "<group>"; };
|
||||||
|
71E8B2D020387CE60037BA62 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
71E8B2DD20387D830037BA62 /* Gifu_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Gifu_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
71E8B2DF20387D830037BA62 /* Gifu_tvOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gifu_tvOS.h; sourceTree = "<group>"; };
|
||||||
|
71E8B2E020387D830037BA62 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
71E8B2E520387D830037BA62 /* Gifu_tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gifu_tvOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
71E8B30020387E1E0037BA62 /* nailed.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = nailed.gif; sourceTree = "<group>"; };
|
||||||
|
71E8B30120387E1E0037BA62 /* mugen.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = mugen.gif; sourceTree = "<group>"; };
|
||||||
EAF49C7E1A3A4DE000B395DF /* UIImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = "<group>"; };
|
EAF49C7E1A3A4DE000B395DF /* UIImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = "<group>"; };
|
||||||
EAF49CB01A3B6EEB00B395DF /* AnimatedFrame.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedFrame.swift; sourceTree = "<group>"; };
|
EAF49CB01A3B6EEB00B395DF /* AnimatedFrame.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedFrame.swift; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
@ -71,6 +102,21 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
71E8B2D920387D830037BA62 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
71E8B2E220387D830037BA62 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
71E8B2E620387D830037BA62 /* Gifu_tvOS.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
@ -128,9 +174,12 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
009BD1371BBC7F6500FC982B /* GifuTests */,
|
009BD1371BBC7F6500FC982B /* GifuTests */,
|
||||||
|
71E8B2CD20387CE60037BA62 /* Gifu_tvOSTests */,
|
||||||
|
71E8B2DE20387D830037BA62 /* Gifu_tvOS */,
|
||||||
00B8C73F1A364DA400C188E7 /* Products */,
|
00B8C73F1A364DA400C188E7 /* Products */,
|
||||||
00B8C75A1A364DBE00C188E7 /* Source */,
|
00B8C75A1A364DBE00C188E7 /* Source */,
|
||||||
00B8C7411A364DA400C188E7 /* Supporting Files */,
|
00B8C7411A364DA400C188E7 /* Supporting Files */,
|
||||||
|
71E8B2B82038784C0037BA62 /* Gifu_tvOS-Info.plist */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
@ -139,6 +188,8 @@
|
||||||
children = (
|
children = (
|
||||||
00B8C73E1A364DA400C188E7 /* Gifu.framework */,
|
00B8C73E1A364DA400C188E7 /* Gifu.framework */,
|
||||||
009BD1361BBC7F6500FC982B /* GifuTests.xctest */,
|
009BD1361BBC7F6500FC982B /* GifuTests.xctest */,
|
||||||
|
71E8B2DD20387D830037BA62 /* Gifu_tvOS.framework */,
|
||||||
|
71E8B2E520387D830037BA62 /* Gifu_tvOSTests.xctest */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -162,6 +213,35 @@
|
||||||
path = Source;
|
path = Source;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
71E8B2CD20387CE60037BA62 /* Gifu_tvOSTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
71E8B2FF20387E1E0037BA62 /* Images */,
|
||||||
|
71E8B2CE20387CE60037BA62 /* Gifu_tvOSTests.swift */,
|
||||||
|
71E8B2D020387CE60037BA62 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = Gifu_tvOSTests;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
71E8B2DE20387D830037BA62 /* Gifu_tvOS */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
71E8B2DF20387D830037BA62 /* Gifu_tvOS.h */,
|
||||||
|
71E8B2E020387D830037BA62 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = Gifu_tvOS;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
71E8B2FF20387E1E0037BA62 /* Images */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
71E8B30020387E1E0037BA62 /* nailed.gif */,
|
||||||
|
71E8B30120387E1E0037BA62 /* mugen.gif */,
|
||||||
|
);
|
||||||
|
name = Images;
|
||||||
|
path = GifuTests/Images;
|
||||||
|
sourceTree = SOURCE_ROOT;
|
||||||
|
};
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXHeadersBuildPhase section */
|
/* Begin PBXHeadersBuildPhase section */
|
||||||
|
@ -173,6 +253,14 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
71E8B2DA20387D830037BA62 /* Headers */ = {
|
||||||
|
isa = PBXHeadersBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
71E8B2ED20387D830037BA62 /* Gifu_tvOS.h in Headers */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXHeadersBuildPhase section */
|
/* End PBXHeadersBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
|
@ -213,13 +301,49 @@
|
||||||
productReference = 00B8C73E1A364DA400C188E7 /* Gifu.framework */;
|
productReference = 00B8C73E1A364DA400C188E7 /* Gifu.framework */;
|
||||||
productType = "com.apple.product-type.framework";
|
productType = "com.apple.product-type.framework";
|
||||||
};
|
};
|
||||||
|
71E8B2DC20387D830037BA62 /* Gifu_tvOS */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 71E8B2EE20387D830037BA62 /* Build configuration list for PBXNativeTarget "Gifu_tvOS" */;
|
||||||
|
buildPhases = (
|
||||||
|
71E8B2D820387D830037BA62 /* Sources */,
|
||||||
|
71E8B2D920387D830037BA62 /* Frameworks */,
|
||||||
|
71E8B2DA20387D830037BA62 /* Headers */,
|
||||||
|
71E8B2DB20387D830037BA62 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = Gifu_tvOS;
|
||||||
|
productName = Gifu_tvOS;
|
||||||
|
productReference = 71E8B2DD20387D830037BA62 /* Gifu_tvOS.framework */;
|
||||||
|
productType = "com.apple.product-type.framework";
|
||||||
|
};
|
||||||
|
71E8B2E420387D830037BA62 /* Gifu_tvOSTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 71E8B2F120387D830037BA62 /* Build configuration list for PBXNativeTarget "Gifu_tvOSTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
71E8B2E120387D830037BA62 /* Sources */,
|
||||||
|
71E8B2E220387D830037BA62 /* Frameworks */,
|
||||||
|
71E8B2E320387D830037BA62 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
71E8B2E820387D830037BA62 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = Gifu_tvOSTests;
|
||||||
|
productName = Gifu_tvOSTests;
|
||||||
|
productReference = 71E8B2E520387D830037BA62 /* Gifu_tvOSTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
/* Begin PBXProject section */
|
||||||
00B8C7351A364DA400C188E7 /* Project object */ = {
|
00B8C7351A364DA400C188E7 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 0700;
|
LastSwiftUpdateCheck = 0920;
|
||||||
LastUpgradeCheck = 0900;
|
LastUpgradeCheck = 0900;
|
||||||
ORGANIZATIONNAME = "Kaishin & Co";
|
ORGANIZATIONNAME = "Kaishin & Co";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
|
@ -232,6 +356,14 @@
|
||||||
LastSwiftMigration = 0900;
|
LastSwiftMigration = 0900;
|
||||||
ProvisioningStyle = Manual;
|
ProvisioningStyle = Manual;
|
||||||
};
|
};
|
||||||
|
71E8B2DC20387D830037BA62 = {
|
||||||
|
CreatedOnToolsVersion = 9.2;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
|
};
|
||||||
|
71E8B2E420387D830037BA62 = {
|
||||||
|
CreatedOnToolsVersion = 9.2;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 00B8C7381A364DA400C188E7 /* Build configuration list for PBXProject "Gifu" */;
|
buildConfigurationList = 00B8C7381A364DA400C188E7 /* Build configuration list for PBXProject "Gifu" */;
|
||||||
|
@ -248,6 +380,8 @@
|
||||||
targets = (
|
targets = (
|
||||||
00B8C73D1A364DA400C188E7 /* Gifu */,
|
00B8C73D1A364DA400C188E7 /* Gifu */,
|
||||||
009BD1351BBC7F6500FC982B /* GifuTests */,
|
009BD1351BBC7F6500FC982B /* GifuTests */,
|
||||||
|
71E8B2DC20387D830037BA62 /* Gifu_tvOS */,
|
||||||
|
71E8B2E420387D830037BA62 /* Gifu_tvOSTests */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
@ -269,6 +403,22 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
71E8B2DB20387D830037BA62 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
71E8B2E320387D830037BA62 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
71E8B30220387E1E0037BA62 /* nailed.gif in Resources */,
|
||||||
|
71E8B30320387E1E0037BA62 /* mugen.gif in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
@ -314,6 +464,31 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
71E8B2D820387D830037BA62 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
71E8B2FD20387D950037BA62 /* ImageSourceHelpers.swift in Sources */,
|
||||||
|
71E8B2F820387D8E0037BA62 /* GIFImageView.swift in Sources */,
|
||||||
|
71E8B2FC20387D910037BA62 /* UIImageView.swift in Sources */,
|
||||||
|
71E8B2FB20387D910037BA62 /* UIImage.swift in Sources */,
|
||||||
|
71E8B2F520387D8E0037BA62 /* Animator.swift in Sources */,
|
||||||
|
71E8B2F620387D8E0037BA62 /* FrameStore.swift in Sources */,
|
||||||
|
71E8B2FA20387D910037BA62 /* CGSize.swift in Sources */,
|
||||||
|
71E8B2F920387D910037BA62 /* Array.swift in Sources */,
|
||||||
|
71E8B2F720387D8E0037BA62 /* GIFAnimatable.swift in Sources */,
|
||||||
|
71E8B2F420387D8E0037BA62 /* AnimatedFrame.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
71E8B2E120387D830037BA62 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
71E8B30420387ED70037BA62 /* Gifu_tvOSTests.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
/* Begin PBXTargetDependency section */
|
||||||
|
@ -322,6 +497,11 @@
|
||||||
target = 00B8C73D1A364DA400C188E7 /* Gifu */;
|
target = 00B8C73D1A364DA400C188E7 /* Gifu */;
|
||||||
targetProxy = 009BD13C1BBC7F6500FC982B /* PBXContainerItemProxy */;
|
targetProxy = 009BD13C1BBC7F6500FC982B /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
|
71E8B2E820387D830037BA62 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 71E8B2DC20387D830037BA62 /* Gifu_tvOS */;
|
||||||
|
targetProxy = 71E8B2E720387D830037BA62 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
/* Begin XCBuildConfiguration section */
|
/* Begin XCBuildConfiguration section */
|
||||||
|
@ -509,6 +689,116 @@
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
71E8B2EF20387D830037BA62 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_IDENTITY = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
DEFINES_MODULE = YES;
|
||||||
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
INFOPLIST_FILE = Gifu_tvOS/Info.plist;
|
||||||
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "co.kaishin.gifu.Gifu-tvOS";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 11.2;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
71E8B2F020387D830037BA62 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_IDENTITY = "";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
DEFINES_MODULE = YES;
|
||||||
|
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||||
|
DYLIB_CURRENT_VERSION = 1;
|
||||||
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
INFOPLIST_FILE = Gifu_tvOS/Info.plist;
|
||||||
|
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "co.kaishin.gifu.Gifu-tvOS";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 11.2;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
71E8B2F220387D830037BA62 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
INFOPLIST_FILE = Gifu_tvOSTests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "co.kaishin.gifu.Gifu-tvOSTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 11.2;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
71E8B2F320387D830037BA62 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
INFOPLIST_FILE = Gifu_tvOSTests/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = "co.kaishin.gifu.Gifu-tvOSTests";
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SDKROOT = appletvos;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||||
|
SWIFT_VERSION = 4.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = 3;
|
||||||
|
TVOS_DEPLOYMENT_TARGET = 11.2;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
|
@ -539,6 +829,24 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
71E8B2EE20387D830037BA62 /* Build configuration list for PBXNativeTarget "Gifu_tvOS" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
71E8B2EF20387D830037BA62 /* Debug */,
|
||||||
|
71E8B2F020387D830037BA62 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
71E8B2F120387D830037BA62 /* Build configuration list for PBXNativeTarget "Gifu_tvOSTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
71E8B2F220387D830037BA62 /* Debug */,
|
||||||
|
71E8B2F320387D830037BA62 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
/* End XCConfigurationList section */
|
/* End XCConfigurationList section */
|
||||||
};
|
};
|
||||||
rootObject = 00B8C7351A364DA400C188E7 /* Project object */;
|
rootObject = 00B8C7351A364DA400C188E7 /* Project object */;
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>en</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>3.0.0</string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>142</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,19 @@
|
||||||
|
//
|
||||||
|
// Gifu_tvOS.h
|
||||||
|
// Gifu_tvOS
|
||||||
|
//
|
||||||
|
// Created by Gruppioni Michele on 17/02/18.
|
||||||
|
// Copyright © 2018 Kaishin & Co. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
|
//! Project version number for Gifu_tvOS.
|
||||||
|
FOUNDATION_EXPORT double Gifu_tvOSVersionNumber;
|
||||||
|
|
||||||
|
//! Project version string for Gifu_tvOS.
|
||||||
|
FOUNDATION_EXPORT const unsigned char Gifu_tvOSVersionString[];
|
||||||
|
|
||||||
|
// In this header, you should import all the public headers of your framework using statements like #import <Gifu_tvOS/PublicHeader.h>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>FMWK</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string></string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,107 @@
|
||||||
|
//
|
||||||
|
// Gifu_tvOSTests.swift
|
||||||
|
// Gifu_tvOSTests
|
||||||
|
//
|
||||||
|
// Created by Gruppioni Michele on 17/02/18.
|
||||||
|
// Copyright © 2018 Kaishin & Co. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import XCTest
|
||||||
|
import ImageIO
|
||||||
|
@testable import Gifu_tvOS
|
||||||
|
|
||||||
|
private let imageData = testImageDataNamed("mugen.gif")
|
||||||
|
private let staticImage = UIImage(data: imageData)!
|
||||||
|
private let preloadFrameCount = 20
|
||||||
|
|
||||||
|
class DummyAnimatable: GIFAnimatable {
|
||||||
|
init() {}
|
||||||
|
var animator: Animator? = nil
|
||||||
|
var image: UIImage? = nil
|
||||||
|
var layer = CALayer()
|
||||||
|
var frame: CGRect = .zero
|
||||||
|
var contentMode: UIViewContentMode = .scaleToFill
|
||||||
|
func animatorHasNewFrame() {}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GifuTests: XCTestCase {
|
||||||
|
var animator: Animator!
|
||||||
|
var originalFrameCount: Int!
|
||||||
|
let delegate = DummyAnimatable()
|
||||||
|
|
||||||
|
override func setUp() {
|
||||||
|
super.setUp()
|
||||||
|
animator = Animator(withDelegate: delegate)
|
||||||
|
animator.prepareForAnimation(withGIFData: imageData, size: staticImage.size, contentMode: .scaleToFill)
|
||||||
|
originalFrameCount = 44
|
||||||
|
}
|
||||||
|
|
||||||
|
func testIsAnimatable() {
|
||||||
|
XCTAssertNotNil(animator.frameStore)
|
||||||
|
guard let store = animator.frameStore else { return }
|
||||||
|
XCTAssertTrue(store.isAnimatable)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testCurrentFrame() {
|
||||||
|
XCTAssertNotNil(animator.frameStore)
|
||||||
|
guard let store = animator.frameStore else { return }
|
||||||
|
XCTAssertEqual(store.currentFrameIndex, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func testFramePreload() {
|
||||||
|
XCTAssertNotNil(animator.frameStore)
|
||||||
|
guard let store = animator.frameStore else { return }
|
||||||
|
|
||||||
|
let expectation = self.expectation(description: "frameDuration")
|
||||||
|
|
||||||
|
store.prepareFrames {
|
||||||
|
let animatedFrameCount = store.animatedFrames.count
|
||||||
|
XCTAssertEqual(animatedFrameCount, self.originalFrameCount)
|
||||||
|
XCTAssertNotNil(store.frame(at: preloadFrameCount - 1))
|
||||||
|
XCTAssertNil(store.frame(at: preloadFrameCount + 1)?.images)
|
||||||
|
XCTAssertEqual(store.currentFrameIndex, 0)
|
||||||
|
|
||||||
|
store.shouldChangeFrame(with: 1.0) { hasNewFrame in
|
||||||
|
XCTAssertTrue(hasNewFrame)
|
||||||
|
XCTAssertEqual(store.currentFrameIndex, 1)
|
||||||
|
expectation.fulfill()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForExpectations(timeout: 1.0) { error in
|
||||||
|
if let error = error {
|
||||||
|
print("Error: \(error.localizedDescription)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testFrameInfo() {
|
||||||
|
XCTAssertNotNil(animator.frameStore)
|
||||||
|
guard let store = animator.frameStore else { return }
|
||||||
|
|
||||||
|
let expectation = self.expectation(description: "testFrameInfoIsAccurate")
|
||||||
|
|
||||||
|
store.prepareFrames {
|
||||||
|
let frameDuration = store.frame(at: 5)?.duration ?? 0
|
||||||
|
XCTAssertTrue((frameDuration - 0.05) < 0.00001)
|
||||||
|
|
||||||
|
let imageSize = store.frame(at: 5)?.size ?? CGSize.zero
|
||||||
|
XCTAssertEqual(imageSize, staticImage.size)
|
||||||
|
|
||||||
|
expectation.fulfill()
|
||||||
|
}
|
||||||
|
|
||||||
|
waitForExpectations(timeout: 1.0) { error in
|
||||||
|
if let error = error {
|
||||||
|
print("Error: \(error.localizedDescription)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func testImageDataNamed(_ name: String) -> Data {
|
||||||
|
let testBundle = Bundle(for: GifuTests.self)
|
||||||
|
let imagePath = testBundle.bundleURL.appendingPathComponent(name)
|
||||||
|
return (try! Data(contentsOf: imagePath))
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>BNDL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -1,3 +1,4 @@
|
||||||
|
import UIKit
|
||||||
/// Represents a single frame in a GIF.
|
/// Represents a single frame in a GIF.
|
||||||
struct AnimatedFrame {
|
struct AnimatedFrame {
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import UIKit
|
||||||
|
|
||||||
/// Responsible for parsing GIF data and decoding the individual frames.
|
/// Responsible for parsing GIF data and decoding the individual frames.
|
||||||
public class Animator {
|
public class Animator {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import ImageIO
|
import ImageIO
|
||||||
|
import UIKit
|
||||||
|
|
||||||
/// Responsible for storing and updating the frames of a single GIF.
|
/// Responsible for storing and updating the frames of a single GIF.
|
||||||
class FrameStore {
|
class FrameStore {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import Foundation
|
import Foundation
|
||||||
|
import UIKit
|
||||||
|
|
||||||
/// The protocol that view classes need to conform to to enable animated GIF support.
|
/// The protocol that view classes need to conform to to enable animated GIF support.
|
||||||
public protocol GIFAnimatable: class {
|
public protocol GIFAnimatable: class {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import UIKit
|
||||||
/// Example class that conforms to `GIFAnimatable`. Uses default values for the animator frame buffer count and resize behavior. You can either use it directly in your code or use it as a blueprint for your own subclass.
|
/// Example class that conforms to `GIFAnimatable`. Uses default values for the animator frame buffer count and resize behavior. You can either use it directly in your code or use it as a blueprint for your own subclass.
|
||||||
public class GIFImageView: UIImageView, GIFAnimatable {
|
public class GIFImageView: UIImageView, GIFAnimatable {
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
import Foundation
|
||||||
|
import UIKit
|
||||||
extension CGSize {
|
extension CGSize {
|
||||||
/// Calculates the aspect ratio of the size.
|
/// Calculates the aspect ratio of the size.
|
||||||
///
|
///
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import UIKit
|
||||||
/// A `UIImage` extension that makes it easier to resize the image and inspect its size.
|
/// A `UIImage` extension that makes it easier to resize the image and inspect its size.
|
||||||
extension UIImage {
|
extension UIImage {
|
||||||
/// Resizes an image instance.
|
/// Resizes an image instance.
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
/// Makes `UIImageView` conform to `ImageContainer`
|
/// Makes `UIImageView` conform to `ImageContainer`
|
||||||
|
import UIKit
|
||||||
extension UIImageView: ImageContainer {}
|
extension UIImageView: ImageContainer {}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>141</string>
|
<string>142</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
</dict>
|
</dict>
|
||||||
|
|
Loading…
Reference in New Issue