ã¯ããã«çŽ¹ä»ããŸãã ãã¥ãŒã¹ã¹ã¿ã³ããšã¯äœã§ããïŒ ãã®ãããªãšã³ãã£ãã£ã¯ã©ãããæ¥ãŠãäœã«å€ãããŸãããïŒ èããŠã¿ããšãç§ã¯æ¬¡ã®ããšã«æ°ä»ããŸãããiOSããã°ã©ã ã«å ãŸãããã®ããŒãžã§ã³ã®éèªã¯ãåã«ç¡è²¬ä»»ãªãµã€ãºãšããç¹ã§pdfãšã¯ç°ãªããŸãã ãã®çç±ã®1ã€ã¯ãèšå€§ãªåçã®å±±ã§ãã ãã ãããã®ããŒãã¯iOSãã¬ãžã³ã®å æ²¢ãçã¿åºããŸãã ãã¥ãŒã¹ã¹ã¿ã³ãã®ã¢ã€ãã¢ãçãŸããçç±ã¯ãç§ãç解ããŠããããã«ãç¹å®ã®ã³ã³ãã³ãã®æææš©ã«é¢ããAppleã®ç«å Žã§ããã ã€ãŸã ã¿ã¹ã¯ã¯å®æçã«é åžããããã«æ£çŽã«ïŒå€ãã®å Žåãæ¯æãããŸãïŒãã³ããŒããŒã¹ããå°é£ã§ããã ãããã®äººãã¡ã¯ãã®ä»äºã«å¯ŸåŠããŸãã-ãã¥ãŒã¹ã¹ã¿ã³ããããé«ãçŸéå転çãæã€é»ååºç瀟ã¯ååšããªããšæããŸãïŒããèšãã°ïŒã
ãŠãŒã¶ãŒã¬ãã«ã§ããã€ãã®éèªã確èªããããæè¡çãªè§£æ±ºçãæ¢ããŸãã ãŸãããã¥ãŒã¹ã¹ã¿ã³ãããããç»å ŽããŸããã
ãã¥ãŒã¹ã¹ã¿ã³ããããã¯ã次ã®ã®ãºã¢ã§æ§æãããŠããŸããéèªã®åã ã®å·ã®ç¹å¥ãªã©ã€ãã©ãªç®¡çã¡ã«ããºã ïŒNKLibraryïŒïŒNKIssueïŒãšãã®ããã¯ã°ã©ãŠã³ãããŠã³ããŒããå«ãããŠã³ããŒãïŒNKAssetDownloadïŒã ãã£ãããïŒ ãããããã®åœæããããã®ã®ãºã¢ãéèªã«å€ããæ¹æ³ã¯ç§ã«ã¯å®å šã«äžæ確ã§ããã
ãã¹ãŠåãã§ãã æããã«ãããã°ã©ã éèªã¯2ã€ã®éšåã§æ§æãããŠããŸãïŒéèªã®åé¡ã®ç®¡çãšå¥ã®éèªã®è¡šç€ºã ã€ãŸã ãã¥ãŒã¹ã¹ã¿ã³ããããã¯ãæåã®ã³ã³ããŒãã³ãã§ãã管çã«çŠç¹ãåœãŠãŠããŸãã 2çªç®ã®ã³ã³ããŒãã³ã-éèªã®1ã€ã®å·ã®è¡šç€º-Appleã¯ãã³ãã¬ãŒãã«è² æ ããããŸããã§ããã 2çªç®ã«åœŒå¥³ããå§ããŸãã
çè«çã«ã¯ããµãŒããŒããå¿ èŠãªæ å ±ããã¹ãŠããŠã³ããŒãããŠè¡šç€ºããå¿ èŠããããŸãã ã€ãŸã ããã¯ãã³ãã¬ããã®è£è¶³ã«ã€ããŠã§ããã ããŠã³ããŒããããæ å ±ã¯ãæ¡ä»¶ä»ãã§ãåææïŒç»åããã£ã«ã ãããã¹ããhtml-inãpdfïŒãšèšå®ã«åããããããã«ãã£ãŠãã¹ãŠããŸãšããããšãã§ããŸãã 誰ãããã³ãã¬ããã«ã€ããŠèªãããšã«èå³ããããšã¯æããªãã®ã§ãçµå¶ã«é¢ããéšåã«ããããããã«éããŸãã
äžã§è¿°ã¹ãããã«ãAppleã¯ç¹å®ã®éèªã®è¡šç€ºã«é¢ããŠéçºè ãå¶éããŠããŸããã ãã ããã¹ã¯ã€ãã§éèªãããŒãžã³ã°ããŠãããããè¯ã圢ã§åãå ¥ããããŸãã ãã®ããã«ãUIScrollViewãšç¡éã¹ã¯ããŒã«ã®ã¢ã€ãã¢ã䜿çšããŸããïŒdev apple-> WWDC-> ScrollView Techniques-> Infinite scrollingïŒã ç°¡åã«èšããšãã¡ã€ã³ãã¥ãŒå šäœã«UIScrollViewãé 眮ããå¿ èŠããããŸãã UIScrollViewã®å ŽåãcontentSizeã3ã€ã®ç»é¢å¹ ã«èšå®ãã3ã€ã®UIViewãé 眮ããŸãïŒãããã1ã€ã®ç»é¢ã®ãµã€ãºïŒã ããã«ããã€ãã®èšå®ããããã¹ã¯ã€ãã§çŸããããŒãžã³ã°ããããŸãã ãã£ããã·ã¥ã©ã€ã³ã§ã¯ãUIScrollViewããªã²ãŒãã¡ãœãã-scrollViewDidEndDeceleratingïŒãå®è£ ããããã«å¿ããŠãå éšUIViewãæŽæ°ããŸãã ç¡éã¹ã¯ããŒã«ã®è€éã-å¥ã®ç®ã«èŠããUIVeiwãåæ§ã®UIScrollViewãåã蟌ããšãæ°Žå¹³ããã³åçŽã®å転ã«ã€ãªãããŸãã
ããã£ã çåãæ®ããŸãïŒçŸæç¹ã§å¿ èŠãªUIViewã®å ¥æå ã¯ïŒ
ããã®ç¬éãããå§ããŸãããã ãã®ç¹åŸŽã¯ãéèªã®éããŠããããŒãžã®çªå·ã§ãããšèšããŸãã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãçŸåšã®ããŒãžã®ã€ã³ããã¯ã¹ãæ ŒçŽããã®ãºã¢ãå¿ èŠã§ããããšãããããŸããã ãã®ãããªããšã¯ã¢ããªã±ãŒã·ã§ã³å šäœã«å¿ èŠã§ãããããã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããã¯ãã§ããã·ã³ã°ã«ãã³ãå¿ èŠã§ãã ã€ã³ããã¯ã¹ãããå Žåã質åã¯æ°ãããã®ã«èŠçŽãããŸããã€ã³ããã¯ã¹ã«é©åãªUIViewã¯ã©ãã§å ¥æã§ããŸããïŒ ããããèšå®ã¯ãããç¥ã£ãŠããŸãã ããã«ãã·ã³ã°ã«ãã³ã«æ§æã®èªã¿åããäŸé Œããã€ã³ããã¯ã¹ãç¥ã£ãŠãç®çã®ãã¥ãŒãçºè¡ããŠãã ããã ã·ã³ã°ã«ãã³ã€ã³ã¿ãŒãã§ã€ã¹ãæå®ããŠãèšå®ã«ç§»åããŸã
@interface DataManager : NSObject @property (nonatomic) int articleIndex; @property (nonatomic) int pageIndex; @property (nonatomic, strong) NSArray *articles; + (id) sharedManager; - (UIView *) currentView; - (UIView *) prevView; - (UIView *) nextView; - (UIView *) upperView; - (UIView *) lowerView; - (int) lastArticleIndex; - (int) lastPageIndex; @end
Objective-Cã®æ§æã¯ã.plistãã¡ã€ã«ã衚瀺ããããã«åãå ¥ãããããã䟿å©ã§ãã å®éã«ã¯ãéèªã®ããŒãžããããã®ããŒãžã®èšå®ãããã³çã®ããŒãžãžã®ãªã³ã¯ã衚瀺ããplistãäœæããå¿ èŠããããŸãã äŸãããæ確ã«ãªããšæããŸã
<plist version="1.0"> <array> <array> <dict> <key>class</key> <string>SimplePage</string> <key>properties</key> <dict> <key>baseImage</key> <string>1-0.png</string> </dict> </dict> </array> <array> <array> <array>
<dict> <dict> <key>class</key> <string>PhotoPage</string> <key>properties</key> <dict> <key>baseImage</key> <string>9-0-4.png</string> <key>photos</key> <array> <dict> <key>photo</key> <string>9-1-f1.png</string> <key>thumbnail</key> <string>9-1-f1m.png</string> </dict> <dict> <dict> <dict>
åããŒãžã®æåã®ããããã£ã§ããã¯ã©ã¹ã«æ°ã¥ãããšæããŸãã ããããªããŠäŸ¿å©ã§ãããïŒ configã«ã¯ã©ã¹åãæžãããã®äžã«ç®çã®ããŒãžãäœæããŸããã åè¿°ã®ã·ã³ã°ã«ãã³ã®ãã©ã°ã¡ã³ã
- (UIView *) currentView { NSArray *article = [self.articles objectAtIndex:articleIndex]; NSDictionary *page = [article objectAtIndex:pageIndex]; return [self viewWithDictionary:page]; } - (UIView *) viewWithDictionary: (NSDictionary *) dictionary { Class class = NSClassFromString([dictionary valueForKey:@"class"]); NSDictionary *pageProperties = [dictionary valueForKey:@"properties"]; UIView *uiView = [[class alloc] initWithDictionary:pageProperties]; return uiView; }
èšåãã¹ãããšã¯äœã§ããïŒ SimplePageã€ã³ã¿ãŒãã§ãŒã¹ã玹ä»ããŸãã æ®ãã®ããŒãžã¯ã©ã¹ã¯ãäœããã®æ¹æ³ã§ãããç¶æ¿ããŸã
@interface SimplePage : UIView @property (nonatomic, strong) NSString *imageDirectory; - (id) initWithDictionary: (NSDictionary *) pageProperties; @end
ã€ãŸã UIViewããç¶æ¿ããã¯ã©ã¹ã®ã»ãããäœæãããããã®ã¯ã©ã¹ã«åŸã£ãŠåäžãã°ã®æ§æãäœæããŸãã
å¥ã®imageDirectoryå€æ°ã次ã«ç€ºããŸãã ããã§ã®äºå®ã¯ãåŸã§ãã³ãã¬ããã®åçãåéãããããã«plistãå ¥ããŠããã®ãã®ããµãŒããŒã«éä¿¡ããå¿ èŠããããšããããšã§ãã ãããã£ãŠããããžã§ã¯ãã«åçãè¿œå ãã代ããã«ãã·ãã¥ã¬ãŒã¿ãŒã®ãã©ã«ããŒã§ããDocumentsDirectoryã«åçãåéããŸããã ãããŠããã«ãã®åæåããããŸã
#if IS_LOCAL // doc/img dir imageDirectory = [DocumentsDirectory stringByAppendingPathComponent:@"img"]; #else // issue dir NKIssue *nkCurrentlyReadingIssue = [[NKLibrary sharedLibrary] currentlyReadingIssue]; imageDirectory = [nkCurrentlyReadingIssue.contentURL path]; #endif #if DEBUG NSLog(@"imageDirectory %@", imageDirectory); #endif
åäžã®ãã°ã衚瀺ããããã®å®è£ ãªãã·ã§ã³ã«ã€ããŠãäŒããããã£ãã®ã¯ããã ãã§ãã ç¶ããŸããããïŒ
NKãããžã¡ã³ã
èšèèªäœã¯ãäœãã管çããå¿ èŠãããããšã瀺åããŠããŸãã ãµãŒããŒããããŠã³ããŒããããäœãã®ã³ã¬ã¯ã·ã§ã³ã ããã§ãå¥ã®æ§é ã«ãªããŸãã ãããç解ããã«ã¯ãNKLibraryãšNKIssueãè¡šé¢çã«èæ ®ããå¿ èŠããããŸãã
ã·ã³ãã«ã§ãNKLibraryã¯NKIssue-sã®ã³ã¬ã¯ã·ã§ã³ã§ãã NKLibraryã«ã¯å€ãã®ãŠãŒãã£ãªãã£ããããŸãã ããã¯ãã¥ãŒã¹ã¹ã¿ã³ãã«ãã£ãŠç£šãããã³ã¬ã¯ã·ã§ã³ã§ãã ãããã·ã³ã°ã«ãã³ã§ããããããããã®æ®µéã§ã¯ããã ãã§ãã
NKIssueã¯ã1ã€ã®ãžã£ãŒãã«ã«é¢ããæ å ±ãä¿åããŸãã å°ãªããšããåé¡ã«ã¯ååãšæ¥ä»ãå¿ èŠã§ãã ééã£ãŠããªãå ŽåãååãããŒã«ãªããæ¥ä»ããœãŒããããŸãã
ã ãããäœããã©ãããèŠãŠãããšãissues.plistããããŸãã
<plist version="1.0"> <array> <dict> <key>Name</key> <string>f-2</string> <key>Title</key> <string>/ 2013</string> <key>Date</key> <date>2013-11-28T08:00:00Z</date> <key>Cover</key> <string>http://fo-nt.net/f/f2.png</string> <key>Content</key> <string>http://fo-nt.net/f/f2.zip</string> </dict> <dict> <dict>
ãµãŒããŒããplistãããŠã³ããŒãããç¹°ãè¿ããNKISsueãäœæããŠNKLibraryã«è¿œå ããŸã
NKLibrary *nkLib = [NKLibrary sharedLibrary]; issuesDictionary = [NSArray arrayWithContentsOfFile:issuesPlistFilePath]; for (NSDictionary *issueDictionary in issuesDictionary) { NSString *name = [issueDictionary valueForKey:@"Name"]; NKIssue *nkIssue = [nkLib issueWithName:name]; if(!nkIssue) { [nkLib addIssueWithName:name date:[issueDictionary objectForKey:@"Date"]]; NSString *coverPath = [issueDictionary valueForKey:@"Cover"]; if (IS_RETINA) coverPath = [self retinaURLStringForString:coverPath]; NSString *coverName = [coverPath lastPathComponent];
説æããŸãã åœç¶ãããã§ã¯ãã§ã«NewsstandKitãã€ã³ããŒãããŠããŸãã ãã以å€ã®å ŽåãNKLibraryãšNKIssueã«ã€ããŠã©ã®ããã«ç¥ãããšãã§ããŸããïŒ ç°¡åã«ãNKLibraryã®ã€ã³ã¹ã¿ã³ã¹-nkLibãååŸããŸãã é åã調ã¹ãŠãç¹å®ã®ãã°ããã®ååã§æäŸããããã«nkLibã«äŸé ŒããŸãã ã©ã€ãã©ãªã«ãFIG to youããšè¡šç€ºãããŠããå Žåã¯ãèšå®ã«ãã°ãããããšãæããã«ãªããŸãããã©ã€ãã©ãªã«ã¯ãããŸãã->è¿œå ããå¿ èŠããããŸãã
ãªã¹ãã«ã¯ããifïŒIS_RETINAïŒããšããè¡ããŸã ãããŸãã ç°¡åã«èšãã°ãããã§ã®ãã€ã³ãã¯ããžã£ãŒãã«ã®ãã¹ãŠã®åçããµãŒããŒäžã«ãããšããããšã§ãã ããã§ããã£ã¹ãã¬ã€ã®çš®é¡ã¯ãã§ã«ããã£ãŠããŸãã ããŠãä»ã®äººã®ãã£ã¹ãã¬ã€çšã«åçãããŠã³ããŒãããçç±ã ä»åŸãããŠã³ããŒããããã¯ãéèªããšã«ã¢ãŒã«ã€ãã«é 眮ããããšããå§ãããŸãã æåŸã«ã1ã€ã®éèªã«2ã€ã®ã¢ãŒã«ã€ããäœæããããšã¯è«ççã§ãïŒã·ã³ãã«ãš@ 2xã
çŸåšã®NKLibraryããããŸãã æ§ããã§ããããã§ã«æ¢åã®ãã°ã®UIã衚瀺ã§ããŸãã
åãžã£ãŒãã«ã®ã©ã€ãã©ãªè¡šç€ºã®èŠèŠåã¯ç°ãªããŸãã ãã ãã確ç«ããããã®ããããŸãã ããããã£ã®ã»ãããæã€NKIssueããããŸã-ãããã衚瀺ããŸãã ãã®äžã§ããç¹ã«èå³æ·±ãã®ã¯ããããã㣠'' status ''ã§ããããã¯ããªããããŠã³ããŒãäžã䜿çšå¯èœã§ãã ããã¯ã衚瀺ããããã°ãããŠã³ããŒãã§ãããšããäºå®ã«ã€ãªãããããŠã³ããŒããå®äºããã®ãåŸ ã£ãŠãããããèªã¿åããŸãã
ãã³ãã¬ããäœæã®æ®µéã§æºåããããããããŠã³ããŒãããå¿ èŠããããŸãã NKAssetDownloadã¯3çªç®ã®NKã®ãã®ã§ã-ãã¥ãŒã¹ã¹ã¿ã³ãå°çšã®ããŒããŒïŒããããããã§ãïŒã æé ïŒNKIssueããã³NSURLRequestïŒNSURLããååŸãéžæããããã°ã®URLæååããååŸïŒã䜿çšããŠãNKAssetDownloadã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã downloadWithDelegateã¡ãœãããåŒã³åºãå¿ èŠããããŸãïŒïŒid <NSURLConnectionDownloadDelegate>ïŒããªã²ãŒã
NSURLRequest *req = [NSURLRequest requestWithURL:downloadURL]; NKAssetDownload *assetDownload = [nkIssue addAssetWithRequest:req]; [assetDownload downloadWithDelegate:self]; [assetDownload setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:index], @"Index", nil]];
æ©èœNKAssetDownloadã¯ããã¯ã°ã©ãŠã³ãã§ã®ããŠã³ããŒãã§ãã 圌女ã¯ãã¥ãŒã¹ã¹ã¿ã³ãã«å¿ èŠã§ãã ããã¯ãããŠã³ããŒããããã¯ã°ã©ãŠã³ãã§ç¶è¡ãããããšãæå³ããŸãã ãŸã ã°ããºããããŸãã ãã ããæ»ãæã«ãã¹ãŠã®NKAssetDownloadã€ã³ã¹ã¿ã³ã¹ã§downloadWithDelegateã¡ãœãããåŒã³åºãããšã矩åä»ããããŠãããããbgããŒãã«èå³ããããŸãã
for (NKAssetDownload *assetDownload in [nkIssue downloadingAssets]) { [assetDownload downloadWithDelegate:self]; }
ããããã¹ãŠã®ããã§ãã é²è¡ç¶æ³ããŒã§ããŠã³ããŒããåéããå®äºããã®ãåŸ ã¡ãŸãã ããŠã³ããŒãã®æåŸã«ãã¢ããªã±ãŒã·ã§ã³ã¢ã€ã³ã³[[UIApplication sharedApplication] setNewsstandIconImageïŒ[publisher coverImageForIssueïŒnkIssue]]ã眮ãæããã®ãé©åã§ãã ã¢ãŒã«ã€ãã䜿çšããå Žåã¯ã解åããŸãã ãããã¯ããã¢ããªã±ãŒã·ã§ã³ã¯ããã°ãèªã¿èŸŒãã åŸãããããã£ãã¹NKIssue contentURLã«æ²¿ã£ãŠãã¡ã€ã«ãæžã蟌ãå¿ èŠããããŸãïŒçŸ©åä»ããããŠãããã©ããã¯ããããŸãããäœããæé©åãããŠããå¯èœæ§ããããŸãïŒã
ããã«ãNKIssue㯠'' available ''ã®ã¹ããŒã¿ã¹ãåãå ¥ããŸã-''ãã³ãã¬ãã ''ã衚瀺ã§ããŸãã
次ã®è³ªåïŒã©ã€ãã©ãªãŒã®æŽæ°-issues.plistããªããŒãããæ¢åã®ã¡ãœããã§åŠçããããšã«ãªããŸãã ããã§ããžã£ãŒãã«ãã©ã€ãã©ãªã«è¿œå ããããã©ããã確èªããŸããã 確ãã«ãå®è³ªçãªåé¡ãçºçããŸãã å€ãã®éèªã§ã¯ããŠãŒã¶ãŒã¯æ°ããéèªããªãªãŒã¹ããããŸã§ã«ãããå¿ããããšãã§ããŸãã ãããŠãããã§ã¯ãäžé©åãªããšã«ãæè¿ã«APNSããããŸãã ããã¯å¥ã®ãããã¯ã§ãã ç§ã¯èªããŸããç§ã¯ãããåããŠç¿åŸããŸããã§ããã ãšã«ãããç§ã¯ç§ã®ãžã£ãŒãã«ã§ãããã®éç¥ãããŸããã§ããã éµãšãªãé害ã¯èšŒææžã§ãããããããã®å€æã®å¿ èŠæ§ã§ããã
ããã«ãããããããAPNSïŒãŸããéç¥éä¿¡ãµãŒãã¹ã§ãã ããã°ã©ã ã¯ãå®è¡äžã®ããã€ã¹ã®IDãååŸããŠããµãŒããŒã«è»¢éã§ããŸãã ãŸãããããã®éç¥ããµãã¹ã¯ã©ã€ãããå¿ èŠããããŸãã
@implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Register device for receiving push notifications [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert)];
ãã®åŸãUIApplicationDelegateãããã³ã«ã«ã¯ã¢ããªã±ãŒã·ã§ã³didRegisterForRemoteNotificationsWithDeviceTokenïŒã¡ãœããããããDeviceTokenïŒidïŒãããããããããµãŒããŒæ å ±ãããŒãžã§ããŸãã è¿ãã«ã¢ããªã±ãŒã·ã§ã³ããããŸãïŒdidReceiveRemoteNotificationïŒã¡ãœãããéç¥ãåãåã£ãåŸã«äœããè¡ãããšãã§ããŸãã
ãµãŒããŒåŽã§ã¯ãDeviceTokenã§ãããªã¯ãšã¹ãïŒHTTPïŒãåãå ¥ããŠãããŒã¿ããŒã¹ã«ä¿åããå¿ èŠããããŸãã ããã«ãè³Œå ¥ãããã±ããã«å¿ããŠããŸãã¯ãµãŒããŒã«å±éãããŠãããã®ã«å¿ããŠãAPNSã«éä¿¡ããã¡ãã»ãŒãžãæ¢ãå¿ èŠããããŸãã APIã«ããã°ã蚌ææžãšãã¹ã¯ãŒããæ·»ä»ããããšã«ããããã€ããŒããšDeviceTokenã®äž¡æ¹ãå«ãã¡ãã»ãŒãžãæ¥ç¶ããŠéä¿¡ããŸãã ãŸã 埮åŠãªéãããããŸãããããã¯å¥ã®åé¡ã§ãã
ãšããããiOSãã¬ãžã³ã«ã¯ããã«2ã€ã®å¶éããããŸãã 矜-ãã©ã€ãã·ãŒããªã·ãŒã®URLã æè¡é¢ããèŠããšãéåžžã«ç°¡åã§ãã 2çªç®ã®å¶éã¯ãiTunesConnectå éšè³Œå ¥ã䜿çšããŠã³ã³ãã³ããé åžããå¿ èŠãããããšã§ãã ç§ãç解ããŠããããã«ãããã¯ãŠãŒã¶ãŒãç§ã®ç¡æã®éèªã0ãéã§è²·ããªããã°ãªããªãããšãæå³ããŸãã
åèšãããšãiTunesConnectã®ã¢ããªå è³Œå ¥ã¯ãã¹ãã¢ãããã®äœ¿çšãæå³ããŸãã UserDefaultsã§ã¯ãisFreeSubscribedããããã£ãååŸããŸããã ç§ã¯ã¿ãã§ç¢ºèªããNOã®å Žåã¯ã¢ã©ãŒãã衚瀺ããŸãã åæã«ããã眲åãã
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithObject:@"FreeSubscription"]]; productsRequest.delegate=self; [productsRequest start];
ããã«ãããªã²ãŒãã¡ãœãããå®è£ ããisFreeSubscribedãYESã«èšå®ããŠãIn-App Purchaseãå¿ããå¿ èŠããããŸãã SKProductsRequestã®ProductIdã¯ããã¢ããªå è³Œå ¥ã®ç®¡çãã®äžã®iTunesConnectããååŸããå¿ èŠããããŸãã
話ã®çµããã«ãç§ã¯ããã«éèªã®å¿ èŠæ§ã®ååãããªããšä¿¡ããŠããŸããããããç§ã¯æãåçŽãªéèªã®ããã«æãå¿ èŠãªæè¡çãªè³ªåãæŠèª¬ããããšãã§ãããšä¿¡ãããã§ãã